[llvm] [VPlan] Add BranchOnMultiCond, use for early exit plans. (PR #172750)

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 23 14:26:20 PST 2025


https://github.com/fhahn updated https://github.com/llvm/llvm-project/pull/172750

>From 576a76c999d15b251e58b2ff3eb80dc595d88e97 Mon Sep 17 00:00:00 2001
From: Florian Hahn <flo at fhahn.com>
Date: Wed, 17 Dec 2025 23:11:47 +0000
Subject: [PATCH 1/2] [VPlan] Add BranchOnMultiCond, use for early exit plans.

This PR introduces a new BranchOnMultiCond VPInstruction, that takes N
boolean operands and must be placed in a block with N + 1 successors.

If condition I is true, branches to successor I, otherwise falls through
to check the next condition. If all conditions are false, branch to the
last (N+1) successor.

This new branch recipe is used for early-exit loops, to avoid the need
for splitting the middle block, in a way that preserves the
single-exit block property of regions. All exits still go through the
latch block, but they can go to more than 2 successors.

This idea was part of one of the original proposals for how to model
early exits in VPlan, but at that point in time, there was no good way
to handle this during code-gen, and we went with the split-middle block
approach initially.

Now that we dissolve regions before ::execute, the new recipe can be
lowered nicely after regions have been removed, to a set of VPBBs and
BranchOnCond recipes.

On Apple M cores, the new lowering is ~8-10% faster for std::find-like
loops. It also makes it easier to determine the early exits in VPlan. I
am also planning on extensions to support loops with multiple early
exits and early-exits at different positions, which should also be
slightly easier to do with the new representation.
---
 .../Transforms/Vectorize/LoopVectorize.cpp    |   3 +
 llvm/lib/Transforms/Vectorize/VPlan.cpp       |  17 +-
 llvm/lib/Transforms/Vectorize/VPlan.h         |  17 +-
 .../Transforms/Vectorize/VPlanAnalysis.cpp    |   1 +
 .../Vectorize/VPlanConstruction.cpp           |  15 +-
 .../Transforms/Vectorize/VPlanPatternMatch.h  |  11 +
 .../lib/Transforms/Vectorize/VPlanRecipes.cpp |  12 +-
 .../Transforms/Vectorize/VPlanTransforms.cpp  |  99 +++++--
 .../Transforms/Vectorize/VPlanTransforms.h    |   4 +
 llvm/lib/Transforms/Vectorize/VPlanUtils.cpp  |   9 +-
 llvm/lib/Transforms/Vectorize/VPlanUtils.h    |   3 +-
 .../Transforms/Vectorize/VPlanVerifier.cpp    |  27 +-
 .../AArch64/simple_early_exit.ll              |  74 +++--
 .../AArch64/single-early-exit-interleave.ll   |  13 +-
 .../single-early-exit-cond-poison.ll          |  42 ++-
 .../single-early-exit-deref-assumptions.ll    |  87 +++---
 .../single-early-exit-interleave-hint.ll      |   9 +-
 .../single-early-exit-interleave-only.ll      |  18 +-
 .../single-early-exit-interleave.ll           |  89 +++---
 .../LoopVectorize/single_early_exit.ll        |  85 +++---
 .../single_early_exit_live_outs.ll            | 276 ++++++++----------
 .../single_early_exit_with_outer_loop.ll      |  18 +-
 .../uncountable-early-exit-vplan.ll           |  32 +-
 ...or-loop-backedge-elimination-early-exit.ll | 127 ++++----
 .../PhaseOrdering/AArch64/std-find.ll         | 180 +++++++++---
 25 files changed, 717 insertions(+), 551 deletions(-)

diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
index f8ee1484fb2ef..fcfe08f87fbd0 100644
--- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -7405,6 +7405,9 @@ DenseMap<const SCEV *, Value *> LoopVectorizationPlanner::executePlan(
   // Regions are dissolved after optimizing for VF and UF, which completely
   // removes unneeded loop regions first.
   VPlanTransforms::dissolveLoopRegions(BestVPlan);
+  // Expand BranchOnMultiCond after dissolution, when latch has direct access
+  // to its successors.
+  VPlanTransforms::expandBranchOnMultiCond(BestVPlan);
   // Canonicalize EVL loops after regions are dissolved.
   VPlanTransforms::canonicalizeEVLLoops(BestVPlan);
   VPlanTransforms::materializeBackedgeTakenCount(BestVPlan, VectorPH);
diff --git a/llvm/lib/Transforms/Vectorize/VPlan.cpp b/llvm/lib/Transforms/Vectorize/VPlan.cpp
index 59550d9237e8f..738b8086488a0 100644
--- a/llvm/lib/Transforms/Vectorize/VPlan.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlan.cpp
@@ -592,16 +592,16 @@ static bool hasConditionalTerminator(const VPBasicBlock *VPBB) {
   }
 
   const VPRecipeBase *R = &VPBB->back();
-  bool IsSwitch = isa<VPInstruction>(R) &&
-                  cast<VPInstruction>(R)->getOpcode() == Instruction::Switch;
-  bool IsCondBranch =
+  [[maybe_unused]] bool IsSwitch =
+      isa<VPInstruction>(R) &&
+      cast<VPInstruction>(R)->getOpcode() == Instruction::Switch;
+  [[maybe_unused]] bool IsBranchOnMultiCond = match(R, m_BranchOnMultiCond());
+  [[maybe_unused]] bool IsCondBranch =
       isa<VPBranchOnMaskRecipe>(R) ||
       match(R, m_CombineOr(m_BranchOnCond(), m_BranchOnCount()));
-  (void)IsCondBranch;
-  (void)IsSwitch;
   if (VPBB->getNumSuccessors() == 2 ||
       (VPBB->isExiting() && !VPBB->getParent()->isReplicator())) {
-    assert((IsCondBranch || IsSwitch) &&
+    assert((IsCondBranch || IsSwitch || IsBranchOnMultiCond) &&
            "block with multiple successors not terminated by "
            "conditional branch nor switch recipe");
 
@@ -609,8 +609,9 @@ static bool hasConditionalTerminator(const VPBasicBlock *VPBB) {
   }
 
   if (VPBB->getNumSuccessors() > 2) {
-    assert(IsSwitch && "block with more than 2 successors not terminated by "
-                       "a switch recipe");
+    assert((IsSwitch || IsBranchOnMultiCond) &&
+           "block with more than 2 successors not terminated by "
+           "a switch or branch-on-multi-cond recipe");
     return true;
   }
 
diff --git a/llvm/lib/Transforms/Vectorize/VPlan.h b/llvm/lib/Transforms/Vectorize/VPlan.h
index d043ec41ec1ca..ca175c80f29ea 100644
--- a/llvm/lib/Transforms/Vectorize/VPlan.h
+++ b/llvm/lib/Transforms/Vectorize/VPlan.h
@@ -1058,6 +1058,12 @@ class LLVM_ABI_FOR_TEST VPInstruction : public VPRecipeWithIRFlags,
     // lowered to ICmp + BranchOnCond during VPlan to VPlan transformation.
     BranchOnCount,
     BranchOnCond,
+    // Multi-way branch with N boolean condition operands and N+1 successors.
+    // If condition i is true, branches to successor i; otherwise falls through
+    // to check the next condition. If all conditions are false, branches to
+    // the final successor. Expanded to a chain of BranchOnCond after region
+    // dissolution.
+    BranchOnMultiCond,
     Broadcast,
     /// Given operands of (the same) struct type, creates a struct of fixed-
     /// width vectors each containing a struct field of all operands. The
@@ -1212,6 +1218,7 @@ class LLVM_ABI_FOR_TEST VPInstruction : public VPRecipeWithIRFlags,
     case Instruction::Fence:
     case Instruction::AtomicRMW:
     case VPInstruction::BranchOnCond:
+    case VPInstruction::BranchOnMultiCond:
     case VPInstruction::BranchOnCount:
       return false;
     default:
@@ -4405,7 +4412,7 @@ class VPlan {
   /// latch. If there is an early exit from the vector loop, the middle block
   /// conceptully has the early exit block as third successor, split accross 2
   /// VPBBs. In that case, the second VPBB selects whether to execute the scalar
-  /// tail loop or the exit bock. If the scalar tail loop or exit block are
+  /// tail loop or the exit block. If the scalar tail loop or exit block are
   /// known to always execute, the middle block may branch directly to that
   /// block. This function cannot be called once the vector loop region has been
   /// removed.
@@ -4414,12 +4421,8 @@ class VPlan {
     assert(
         LoopRegion &&
         "cannot call the function after vector loop region has been removed");
-    auto *RegionSucc = cast<VPBasicBlock>(LoopRegion->getSingleSuccessor());
-    if (RegionSucc->getSingleSuccessor() ||
-        is_contained(RegionSucc->getSuccessors(), getScalarPreheader()))
-      return RegionSucc;
-    // There is an early exit. The successor of RegionSucc is the middle block.
-    return cast<VPBasicBlock>(RegionSucc->getSuccessors()[1]);
+    // The middle block is always the last successor of the region.
+    return cast<VPBasicBlock>(LoopRegion->getSuccessors().back());
   }
 
   const VPBasicBlock *getMiddleBlock() const {
diff --git a/llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp b/llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp
index a586aafa2855d..f854616b12283 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp
@@ -135,6 +135,7 @@ Type *VPTypeAnalysis::inferScalarTypeForRecipe(const VPInstruction *R) {
     // Return the type based on first operand.
     return inferScalarType(R->getOperand(0));
   case VPInstruction::BranchOnCond:
+  case VPInstruction::BranchOnMultiCond:
   case VPInstruction::BranchOnCount:
     return Type::getVoidTy(Ctx);
   default:
diff --git a/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp b/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
index 318c05d8ef7c5..d4d51fad80095 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
@@ -428,16 +428,17 @@ static void createLoopRegion(VPlan &Plan, VPBlockBase *HeaderVPB) {
 
   VPBlockUtils::disconnectBlocks(PreheaderVPBB, HeaderVPB);
   VPBlockUtils::disconnectBlocks(LatchVPBB, HeaderVPB);
-  VPBlockBase *LatchExitVPB = LatchVPBB->getSingleSuccessor();
-  assert(LatchExitVPB && "Latch expected to be left with a single successor");
 
   // Create an empty region first and insert it between PreheaderVPBB and
-  // LatchExitVPB, taking care to preserve the original predecessor & successor
-  // order of blocks. Set region entry and exiting after both HeaderVPB and
-  // LatchVPBB have been disconnected from their predecessors/successors.
+  // the exit blocks, taking care to preserve the original predecessor &
+  // successor order of blocks. Set region entry and exiting after both
+  // HeaderVPB and LatchVPBB have been disconnected from their
+  // predecessors/successors.
   auto *R = Plan.createLoopRegion();
-  VPBlockUtils::insertOnEdge(LatchVPBB, LatchExitVPB, R);
-  VPBlockUtils::disconnectBlocks(LatchVPBB, R);
+
+  // Transfer latch's successors to the region.
+  VPBlockUtils::transferSuccessors(LatchVPBB, R);
+
   VPBlockUtils::connectBlocks(PreheaderVPBB, R);
   R->setEntry(HeaderVPB);
   R->setExiting(LatchVPBB);
diff --git a/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h b/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h
index f082b970c7762..4c830fdb106f7 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h
+++ b/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h
@@ -374,6 +374,17 @@ m_BranchOnCond(const Op0_t &Op0) {
   return m_VPInstruction<VPInstruction::BranchOnCond>(Op0);
 }
 
+inline VPInstruction_match<VPInstruction::BranchOnMultiCond>
+m_BranchOnMultiCond() {
+  return m_VPInstruction<VPInstruction::BranchOnMultiCond>();
+}
+
+template <typename Op0_t, typename Op1_t>
+inline VPInstruction_match<VPInstruction::BranchOnMultiCond, Op0_t, Op1_t>
+m_BranchOnMultiCond(const Op0_t &Op0, const Op1_t &Op1) {
+  return m_VPInstruction<VPInstruction::BranchOnMultiCond>(Op0, Op1);
+}
+
 template <typename Op0_t>
 inline VPInstruction_match<VPInstruction::Broadcast, Op0_t>
 m_Broadcast(const Op0_t &Op0) {
diff --git a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
index ddbf014c17d4f..8bf9c094b5ddb 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
@@ -170,7 +170,8 @@ bool VPRecipeBase::mayHaveSideEffects() const {
     auto *VPI = cast<VPInstruction>(this);
     return mayWriteToMemory() ||
            VPI->getOpcode() == VPInstruction::BranchOnCount ||
-           VPI->getOpcode() == VPInstruction::BranchOnCond;
+           VPI->getOpcode() == VPInstruction::BranchOnCond ||
+           VPI->getOpcode() == VPInstruction::BranchOnMultiCond;
   }
   case VPWidenCallSC: {
     Function *Fn = cast<VPWidenCallRecipe>(this)->getCalledScalarFunction();
@@ -471,6 +472,7 @@ unsigned VPInstruction::getNumOperandsForOpcode(unsigned Opcode) {
   case Instruction::PHI:
   case Instruction::Switch:
   case VPInstruction::AnyOf:
+  case VPInstruction::BranchOnMultiCond:
   case VPInstruction::FirstActiveLane:
   case VPInstruction::LastActiveLane:
   case VPInstruction::SLPLoad:
@@ -497,6 +499,7 @@ bool VPInstruction::canGenerateScalarForFirstLane() const {
   case Instruction::PHI:
   case Instruction::Select:
   case VPInstruction::BranchOnCond:
+  case VPInstruction::BranchOnMultiCond:
   case VPInstruction::BranchOnCount:
   case VPInstruction::CalculateTripCountMinusVF:
   case VPInstruction::CanonicalIVIncrementForPart:
@@ -654,6 +657,8 @@ Value *VPInstruction::generate(VPTransformState &State) {
     applyMetadata(*Br);
     return Br;
   }
+  case VPInstruction::BranchOnMultiCond:
+    llvm_unreachable("BranchOnMultiCond should be expanded before execution");
   case VPInstruction::Broadcast: {
     return Builder.CreateVectorSplat(
         State.VF, State.get(getOperand(0), /*IsScalar*/ true), "broadcast");
@@ -1167,6 +1172,7 @@ bool VPInstruction::opcodeMayReadOrWriteFromMemory() const {
   case Instruction::PHI:
   case VPInstruction::AnyOf:
   case VPInstruction::BranchOnCond:
+  case VPInstruction::BranchOnMultiCond:
   case VPInstruction::BranchOnCount:
   case VPInstruction::Broadcast:
   case VPInstruction::BuildStructVector:
@@ -1260,6 +1266,7 @@ bool VPInstruction::usesFirstPartOnly(const VPValue *Op) const {
     return vputils::onlyFirstPartUsed(this);
   case VPInstruction::BranchOnCount:
   case VPInstruction::BranchOnCond:
+  case VPInstruction::BranchOnMultiCond:
   case VPInstruction::CanonicalIVIncrementForPart:
     return true;
   };
@@ -1303,6 +1310,9 @@ void VPInstruction::printRecipe(raw_ostream &O, const Twine &Indent,
   case VPInstruction::BranchOnCond:
     O << "branch-on-cond";
     break;
+  case VPInstruction::BranchOnMultiCond:
+    O << "branch-on-multi-cond";
+    break;
   case VPInstruction::CalculateTripCountMinusVF:
     O << "TC > VF ? TC - VF : 0";
     break;
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index 25a4b60e9a533..a8caffe116fea 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -3694,6 +3694,60 @@ void VPlanTransforms::dissolveLoopRegions(VPlan &Plan) {
     R->dissolveToCFGLoop();
 }
 
+void VPlanTransforms::expandBranchOnMultiCond(VPlan &Plan) {
+  // Expand BranchOnMultiCond instructions into explicit CFG with branching.
+  // This must run after dissolveLoopRegions, when successors have been
+  // restored.
+  SmallVector<VPBasicBlock *> WorkList;
+  for (VPBasicBlock *VPBB : VPBlockUtils::blocksOnly<VPBasicBlock>(
+           vp_depth_first_shallow(Plan.getEntry()))) {
+    if (VPBB->empty())
+      continue;
+    if (match(&VPBB->back(), m_BranchOnMultiCond()))
+      WorkList.push_back(VPBB);
+  }
+
+  for (VPBasicBlock *VPBB : WorkList) {
+    auto *BMC = cast<VPInstruction>(&VPBB->back());
+
+    unsigned NumConds = BMC->getNumOperands();
+    assert(NumConds > 0 &&
+           "BranchOnMultiCond must have at least one condition");
+    DebugLoc DL = BMC->getDebugLoc();
+    const auto Successors = to_vector(VPBB->getSuccessors());
+    assert(Successors.size() == NumConds + 1 &&
+           "BranchOnMultiCond must have N operands and N+1 successors");
+
+    // Disconnect all successors.
+    for (VPBlockBase *Succ : Successors)
+      VPBlockUtils::disconnectBlocks(VPBB, Succ);
+
+    // Create chain of conditional branches. Each condition branches to its
+    // corresponding successor on true, and to the next condition block (or the
+    // final successor) on false.
+    VPBasicBlock *CurrentBlock = VPBB;
+    for (const auto &[I, Cond] : enumerate(BMC->operands())) {
+      VPBlockBase *TrueSucc = Successors[I];
+      VPBlockBase *FalseSucc = Successors[NumConds];
+      if (I + 1 != NumConds) {
+        auto *FalseBlock = Plan.createVPBasicBlock(
+            (Twine(VPBB->getName()) + ".multi.cond." + Twine(I + 1)).str());
+        FalseBlock->setParent(VPBB->getParent());
+        FalseSucc = FalseBlock;
+      }
+
+      VPBuilder(CurrentBlock)
+          .createNaryOp(VPInstruction::BranchOnCond, {Cond}, DL);
+      VPBlockUtils::connectBlocks(CurrentBlock, TrueSucc);
+      VPBlockUtils::connectBlocks(CurrentBlock, FalseSucc);
+
+      CurrentBlock = cast<VPBasicBlock>(FalseSucc);
+    }
+
+    BMC->eraseFromParent();
+  }
+}
+
 void VPlanTransforms::convertToConcreteRecipes(VPlan &Plan) {
   VPTypeAnalysis TypeInfo(Plan);
   SmallVector<VPRecipeBase *> ToRemove;
@@ -3846,36 +3900,36 @@ void VPlanTransforms::handleUncountableEarlyExit(VPBasicBlock *EarlyExitingVPBB,
                               ? CondOfEarlyExitingVPBB
                               : Builder.createNot(CondOfEarlyExitingVPBB);
 
-  // Split the middle block and have it conditionally branch to the early exit
-  // block if CondToEarlyExit.
+  // Create a BranchOnMultiCond in the latch that branches to:
+  // [0] vector.early.exit, [1] middle block, [2] header (continue looping).
   VPValue *IsEarlyExitTaken =
       Builder.createNaryOp(VPInstruction::AnyOf, {CondToEarlyExit});
-  VPBasicBlock *NewMiddle = Plan.createVPBasicBlock("middle.split");
   VPBasicBlock *VectorEarlyExitVPBB =
       Plan.createVPBasicBlock("vector.early.exit");
-  VPBlockUtils::insertOnEdge(LatchVPBB, MiddleVPBB, NewMiddle);
-  VPBlockUtils::connectBlocks(NewMiddle, VectorEarlyExitVPBB);
-  NewMiddle->swapSuccessors();
+  VectorEarlyExitVPBB->setParent(LatchVPBB->getParent());
 
+  // Update PHI operands: copy from EarlyExitingVPBB to VectorEarlyExitVPBB.
+  unsigned PredIdx = EarlyExitVPBB->getIndexForPredecessor(EarlyExitingVPBB);
   VPBlockUtils::connectBlocks(VectorEarlyExitVPBB, EarlyExitVPBB);
 
-  // Update the exit phis in the early exit block.
-  VPBuilder MiddleBuilder(NewMiddle);
   VPBuilder EarlyExitB(VectorEarlyExitVPBB);
+  VPBuilder MiddleBuilder(cast<VPBasicBlock>(MiddleVPBB));
   for (VPRecipeBase &R : EarlyExitVPBB->phis()) {
     auto *ExitIRI = cast<VPIRPhi>(&R);
-    // Early exit operand should always be last, i.e., 0 if EarlyExitVPBB has
-    // a single predecessor and 1 if it has two.
+
+    // Move operand from EarlyExitingVPBB to VectorEarlyExitVPBB.
+    VPValue *IncomingFromEarlyExit = ExitIRI->getOperand(PredIdx);
+    ExitIRI->addOperand(IncomingFromEarlyExit);
+    ExitIRI->removeIncomingValueFor(EarlyExitingVPBB);
+
+    // Early exit operand is now at the last position.
     unsigned EarlyExitIdx = ExitIRI->getNumOperands() - 1;
     if (ExitIRI->getNumOperands() != 1) {
-      // The first of two operands corresponds to the latch exit, via MiddleVPBB
-      // predecessor. Extract its final lane.
+      // The first operand corresponds to the latch exit via MiddleVPBB.
       ExitIRI->extractLastLaneOfLastPartOfFirstOperand(MiddleBuilder);
     }
 
-    VPValue *IncomingFromEarlyExit = ExitIRI->getOperand(EarlyExitIdx);
     if (!IncomingFromEarlyExit->isLiveIn()) {
-      // Update the incoming value from the early exit.
       VPValue *FirstActiveLane = EarlyExitB.createNaryOp(
           VPInstruction::FirstActiveLane, {CondToEarlyExit},
           DebugLoc::getUnknown(), "first.active.lane");
@@ -3885,11 +3939,8 @@ void VPlanTransforms::handleUncountableEarlyExit(VPBasicBlock *EarlyExitingVPBB,
       ExitIRI->setOperand(EarlyExitIdx, IncomingFromEarlyExit);
     }
   }
-  MiddleBuilder.createNaryOp(VPInstruction::BranchOnCond, {IsEarlyExitTaken});
 
-  // Replace the condition controlling the non-early exit from the vector loop
-  // with one exiting if either the original condition of the vector latch is
-  // true or the early exit has been taken.
+  // Get the old latch terminator to extract the trip count condition.
   auto *LatchExitingBranch = cast<VPInstruction>(LatchVPBB->getTerminator());
   // Skip single-iteration loop region
   assert(LatchExitingBranch->getOpcode() == VPInstruction::BranchOnCount &&
@@ -3897,10 +3948,16 @@ void VPlanTransforms::handleUncountableEarlyExit(VPBasicBlock *EarlyExitingVPBB,
   auto *IsLatchExitTaken =
       Builder.createICmp(CmpInst::ICMP_EQ, LatchExitingBranch->getOperand(0),
                          LatchExitingBranch->getOperand(1));
-  auto *AnyExitTaken = Builder.createNaryOp(
-      Instruction::Or, {IsEarlyExitTaken, IsLatchExitTaken});
-  Builder.createNaryOp(VPInstruction::BranchOnCond, AnyExitTaken);
+
+  DebugLoc LatchDL = LatchExitingBranch->getDebugLoc();
   LatchExitingBranch->eraseFromParent();
+
+  Builder.setInsertPoint(LatchVPBB);
+  Builder.createNaryOp(VPInstruction::BranchOnMultiCond,
+                       {IsEarlyExitTaken, IsLatchExitTaken}, LatchDL);
+  LatchVPBB->clearSuccessors();
+  LatchVPBB->setSuccessors({VectorEarlyExitVPBB, MiddleVPBB, HeaderVPBB});
+  VectorEarlyExitVPBB->setPredecessors({LatchVPBB});
 }
 
 /// This function tries convert extended in-loop reductions to
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.h b/llvm/lib/Transforms/Vectorize/VPlanTransforms.h
index 1a3ff4f9b9bbc..4b7f27f614042 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.h
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.h
@@ -281,6 +281,10 @@ struct VPlanTransforms {
   /// Replace loop regions with explicit CFG.
   static void dissolveLoopRegions(VPlan &Plan);
 
+  /// Expand BranchOnMultiCond instructions into explicit CFG with
+  /// BranchOnCond instructions. Should be called after dissolveLoopRegions.
+  static void expandBranchOnMultiCond(VPlan &Plan);
+
   /// Transform EVL loops to use variable-length stepping after region
   /// dissolution.
   ///
diff --git a/llvm/lib/Transforms/Vectorize/VPlanUtils.cpp b/llvm/lib/Transforms/Vectorize/VPlanUtils.cpp
index 25052b7c8b1b3..a1d11df879fdd 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanUtils.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanUtils.cpp
@@ -317,11 +317,10 @@ vputils::getRecipesForUncountableExit(VPlan &Plan,
   //     EMIT vp<%5> = any-of vp<%4>
   //     EMIT vp<%6> = add vp<%2>, vp<%0>
   //     EMIT vp<%7> = icmp eq vp<%6>, ir<64>
-  //     EMIT vp<%8> = or vp<%5>, vp<%7>
-  //     EMIT branch-on-cond vp<%8>
+  //     EMIT branch-on-muli-cond vp<%5>, vp<%8>
   //   No successors
   // }
-  // Successor(s): middle.block
+  // Successor(s): early.exit, middle.block
   //
   // middle.block:
   // Successor(s): preheader
@@ -334,8 +333,8 @@ vputils::getRecipesForUncountableExit(VPlan &Plan,
   auto *Region = Plan.getVectorLoopRegion();
   VPValue *UncountableCondition = nullptr;
   if (!match(Region->getExitingBasicBlock()->getTerminator(),
-             m_BranchOnCond(m_OneUse(m_c_BinaryOr(
-                 m_AnyOf(m_VPValue(UncountableCondition)), m_VPValue())))))
+             m_BranchOnMultiCond(m_AnyOf(m_VPValue(UncountableCondition)),
+                                 m_VPValue())))
     return std::nullopt;
 
   SmallVector<VPValue *, 4> Worklist;
diff --git a/llvm/lib/Transforms/Vectorize/VPlanUtils.h b/llvm/lib/Transforms/Vectorize/VPlanUtils.h
index f79d42d8108aa..44272eea3bf9c 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanUtils.h
+++ b/llvm/lib/Transforms/Vectorize/VPlanUtils.h
@@ -166,8 +166,7 @@ class VPBlockUtils {
                             unsigned PredIdx = -1u, unsigned SuccIdx = -1u) {
     assert((From->getParent() == To->getParent()) &&
            "Can't connect two block with different parents");
-    assert((SuccIdx != -1u || From->getNumSuccessors() < 2) &&
-           "Blocks can't have more than two successors.");
+
     if (SuccIdx == -1u)
       From->appendSuccessor(To);
     else
diff --git a/llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp b/llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp
index 2d63d2a787f88..6702449fa6bee 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp
@@ -392,16 +392,19 @@ bool VPlanVerifier::verifyBlock(const VPBlockBase *VPB) {
   auto *VPBB = dyn_cast<VPBasicBlock>(VPB);
   // Check block's condition bit.
   if (!isa<VPIRBasicBlock>(VPB)) {
-    if (VPB->getNumSuccessors() > 1 ||
-        (VPBB && VPBB->getParent() && VPBB->isExiting() &&
-         !VPBB->getParent()->isReplicator())) {
-      if (!VPBB || !VPBB->getTerminator()) {
+    // VPRegionBlocks can have multiple successors (e.g., with
+    // BranchOnMultiCond) without needing a terminator, so only check
+    // VPBasicBlocks
+    if (VPBB && (VPB->getNumSuccessors() > 1 ||
+                 (VPBB->getParent() && VPBB->isExiting() &&
+                  !VPBB->getParent()->isReplicator()))) {
+      if (!VPBB->getTerminator()) {
         errs() << "Block has multiple successors but doesn't "
                   "have a proper branch recipe!\n";
         return false;
       }
-    } else {
-      if (VPBB && VPBB->getTerminator()) {
+    } else if (VPBB) {
+      if (VPBB->getTerminator()) {
         errs() << "Unexpected branch recipe!\n";
         return false;
       }
@@ -531,15 +534,17 @@ bool VPlanVerifier::verify(const VPlan &Plan) {
   }
 
   if (Exiting->empty()) {
-    errs() << "VPlan vector loop exiting block must end with BranchOnCount or "
-              "BranchOnCond VPInstruction but is empty\n";
+    errs() << "VPlan vector loop exiting block must end with BranchOnCount, "
+              "BranchOnCond, or BranchOnMultiCond VPInstruction but is empty\n";
     return false;
   }
 
   auto *LastInst = dyn_cast<VPInstruction>(std::prev(Exiting->end()));
-  if (!match(LastInst, m_CombineOr(m_BranchOnCond(), m_BranchOnCount()))) {
-    errs() << "VPlan vector loop exit must end with BranchOnCount or "
-              "BranchOnCond VPInstruction\n";
+  if (!match(LastInst, m_CombineOr(m_BranchOnCond(),
+                                   m_CombineOr(m_BranchOnCount(),
+                                               m_BranchOnMultiCond())))) {
+    errs() << "VPlan vector loop exit must end with BranchOnCount, "
+              "BranchOnCond, or BranchOnMultiCond VPInstruction\n";
     return false;
   }
 
diff --git a/llvm/test/Transforms/LoopVectorize/AArch64/simple_early_exit.ll b/llvm/test/Transforms/LoopVectorize/AArch64/simple_early_exit.ll
index 3c1d5e94404ff..233f3ee525d6b 100644
--- a/llvm/test/Transforms/LoopVectorize/AArch64/simple_early_exit.ll
+++ b/llvm/test/Transforms/LoopVectorize/AArch64/simple_early_exit.ll
@@ -25,7 +25,7 @@ define i64 @same_exit_block_pre_inc_use1() #1 {
 ; CHECK-NEXT:    [[TMP6:%.*]] = add i64 3, [[N_VEC]]
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP11:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <vscale x 16 x i8>, ptr [[TMP11]], align 1
@@ -36,10 +36,9 @@ define i64 @same_exit_block_pre_inc_use1() #1 {
 ; CHECK-NEXT:    [[TMP8:%.*]] = freeze <vscale x 16 x i1> [[TMP16]]
 ; CHECK-NEXT:    [[TMP17:%.*]] = call i1 @llvm.vector.reduce.or.nxv16i1(<vscale x 16 x i1> [[TMP8]])
 ; CHECK-NEXT:    [[TMP18:%.*]] = icmp eq i64 [[INDEX_NEXT3]], [[N_VEC]]
-; CHECK-NEXT:    [[TMP19:%.*]] = or i1 [[TMP17]], [[TMP18]]
-; CHECK-NEXT:    br i1 [[TMP19]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP17]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP17]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP18]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 64, [[N_VEC]]
 ; CHECK-NEXT:    br i1 [[CMP_N]], label [[LOOP_END:%.*]], label [[SCALAR_PH]]
@@ -49,7 +48,7 @@ define i64 @same_exit_block_pre_inc_use1() #1 {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP20]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       scalar.ph:
-; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i64 [ [[TMP6]], [[MIDDLE_BLOCK]] ], [ 3, [[ENTRY:%.*]] ]
+; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i64 [ [[TMP6]], [[MIDDLE_BLOCK1]] ], [ 3, [[ENTRY:%.*]] ]
 ; CHECK-NEXT:    br label [[LOOP:%.*]]
 ; CHECK:       loop:
 ; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT:%.*]], [[LOOP_INC:%.*]] ], [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ]
@@ -64,7 +63,7 @@ define i64 @same_exit_block_pre_inc_use1() #1 {
 ; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
 ; CHECK-NEXT:    br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]], !llvm.loop [[LOOP3:![0-9]+]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 67, [[LOOP_INC]] ], [ 67, [[MIDDLE_BLOCK]] ], [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 67, [[LOOP_INC]] ], [ 67, [[MIDDLE_BLOCK1]] ], [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -107,8 +106,8 @@ define i64 @same_exit_block_pre_inc_use4() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[VECTOR_BODY]] ]
-; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <2 x i64> [ <i64 3, i64 4>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[MIDDLE_BLOCK:%.*]] ]
+; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <2 x i64> [ <i64 3, i64 4>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[MIDDLE_BLOCK]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i64, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <2 x i64>, ptr [[TMP1]], align 1
@@ -117,11 +116,10 @@ define i64 @same_exit_block_pre_inc_use4() {
 ; CHECK-NEXT:    [[TMP2:%.*]] = freeze <2 x i1> [[TMP4]]
 ; CHECK-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v2i1(<2 x i1> [[TMP2]])
 ; CHECK-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT2]], 64
-; CHECK-NEXT:    [[TMP7:%.*]] = or i1 [[TMP5]], [[TMP6]]
 ; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <2 x i64> [[VEC_IND]], splat (i64 2)
-; CHECK-NEXT:    br i1 [[TMP7]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -130,7 +128,7 @@ define i64 @same_exit_block_pre_inc_use4() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP8]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -170,7 +168,7 @@ define i64 @loop_contains_safe_call() #1 {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds float, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x float>, ptr [[TMP1]], align 1
@@ -180,10 +178,9 @@ define i64 @loop_contains_safe_call() #1 {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP5]]
 ; CHECK-NEXT:    [[TMP6:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP7:%.*]] = icmp eq i64 [[INDEX_NEXT2]], 64
-; CHECK-NEXT:    [[TMP8:%.*]] = or i1 [[TMP6]], [[TMP7]]
-; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP7]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -192,7 +189,7 @@ define i64 @loop_contains_safe_call() #1 {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP9]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -238,7 +235,7 @@ define i64 @loop_contains_safe_div() #1 {
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX2:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX2:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX1:%.*]] = add i64 3, [[INDEX2]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 [[OFFSET_IDX1]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <vscale x 4 x i32>, ptr [[TMP1]], align 1
@@ -248,10 +245,9 @@ define i64 @loop_contains_safe_div() #1 {
 ; CHECK-NEXT:    [[TMP9:%.*]] = freeze <vscale x 4 x i1> [[TMP15]]
 ; CHECK-NEXT:    [[TMP6:%.*]] = call i1 @llvm.vector.reduce.or.nxv4i1(<vscale x 4 x i1> [[TMP9]])
 ; CHECK-NEXT:    [[TMP7:%.*]] = icmp eq i64 [[INDEX_NEXT2]], [[INDEX1]]
-; CHECK-NEXT:    [[TMP8:%.*]] = or i1 [[TMP6]], [[TMP7]]
-; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP7]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 64, [[INDEX1]]
 ; CHECK-NEXT:    br i1 [[CMP_N]], label [[LOOP_END:%.*]], label [[SCALAR_PH:%.*]]
@@ -274,7 +270,7 @@ define i64 @loop_contains_safe_div() #1 {
 ; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
 ; CHECK-NEXT:    br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]], !llvm.loop [[LOOP7:![0-9]+]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 67, [[LOOP_INC]] ], [ 67, [[MIDDLE_BLOCK]] ], [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 67, [[LOOP_INC]] ], [ 67, [[MIDDLE_BLOCK1]] ], [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -317,7 +313,7 @@ define i64 @loop_contains_load_after_early_exit(ptr dereferenceable(1024) align(
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i32>, ptr [[TMP1]], align 1
@@ -328,12 +324,11 @@ define i64 @loop_contains_load_after_early_exit(ptr dereferenceable(1024) align(
 ; CHECK-NEXT:    [[TMP3:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <4 x i64> [[WIDE_LOAD2]], i32 3
-; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]]
 ; CHECK:       middle.block:
+; CHECK-NEXT:    [[TMP9:%.*]] = extractelement <4 x i64> [[WIDE_LOAD2]], i32 3
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
 ; CHECK-NEXT:    [[FIRST_ACTIVE_LANE:%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v4i1(<4 x i1> [[TMP6]], i1 false)
@@ -341,7 +336,7 @@ define i64 @loop_contains_load_after_early_exit(ptr dereferenceable(1024) align(
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP11]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ [[TMP10]], [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ [[TMP9]], [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -403,7 +398,7 @@ define i32 @diff_exit_block_needs_scev_check(i32 %end) {
 ; CHECK-NEXT:    [[TMP8:%.*]] = trunc i64 [[N_VEC]] to i8
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[TMP10:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 [[INDEX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i32>, ptr [[TMP10]], align 4
 ; CHECK-NEXT:    [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[P2]], i64 [[INDEX]]
@@ -413,18 +408,17 @@ define i32 @diff_exit_block_needs_scev_check(i32 %end) {
 ; CHECK-NEXT:    [[TMP13:%.*]] = freeze <4 x i1> [[TMP14]]
 ; CHECK-NEXT:    [[TMP15:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP13]])
 ; CHECK-NEXT:    [[TMP16:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
-; CHECK-NEXT:    [[TMP17:%.*]] = or i1 [[TMP15]], [[TMP16]]
-; CHECK-NEXT:    br i1 [[TMP17]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP15]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP15]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP16]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[UMAX1]], [[N_VEC]]
 ; CHECK-NEXT:    br i1 [[CMP_N]], label [[EXIT:%.*]], label [[SCALAR_PH]]
 ; CHECK:       vector.early.exit:
 ; CHECK-NEXT:    br label [[FOUND:%.*]]
 ; CHECK:       scalar.ph:
-; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i8 [ [[TMP8]], [[MIDDLE_BLOCK]] ], [ 0, [[ENTRY:%.*]] ], [ 0, [[VECTOR_SCEVCHECK]] ]
-; CHECK-NEXT:    [[BC_RESUME_VAL3:%.*]] = phi i64 [ [[N_VEC]], [[MIDDLE_BLOCK]] ], [ 0, [[ENTRY]] ], [ 0, [[VECTOR_SCEVCHECK]] ]
+; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i8 [ [[TMP8]], [[MIDDLE_BLOCK1]] ], [ 0, [[ENTRY:%.*]] ], [ 0, [[VECTOR_SCEVCHECK]] ]
+; CHECK-NEXT:    [[BC_RESUME_VAL3:%.*]] = phi i64 [ [[N_VEC]], [[MIDDLE_BLOCK1]] ], [ 0, [[ENTRY]] ], [ 0, [[VECTOR_SCEVCHECK]] ]
 ; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
 ; CHECK:       for.body:
 ; CHECK-NEXT:    [[IND:%.*]] = phi i8 [ [[IND_NEXT:%.*]], [[FOR_INC:%.*]] ], [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ]
diff --git a/llvm/test/Transforms/LoopVectorize/AArch64/single-early-exit-interleave.ll b/llvm/test/Transforms/LoopVectorize/AArch64/single-early-exit-interleave.ll
index cc03ef8af8b00..187a95728fdf3 100644
--- a/llvm/test/Transforms/LoopVectorize/AArch64/single-early-exit-interleave.ll
+++ b/llvm/test/Transforms/LoopVectorize/AArch64/single-early-exit-interleave.ll
@@ -26,7 +26,7 @@ define i64 @same_exit_block_pre_inc_use1() #0 {
 ; CHECK-NEXT:    [[INDEX_NEXT:%.*]] = add i64 3, [[N_VEC]]
 ; CHECK-NEXT:    br label [[LOOP:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[LOOP]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[LOOP_INC:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[TMP27:%.*]] = mul nuw nsw i64 [[TMP4]], 2
@@ -60,10 +60,9 @@ define i64 @same_exit_block_pre_inc_use1() #0 {
 ; CHECK-NEXT:    [[TMP33:%.*]] = or <vscale x 16 x i1> [[TMP62]], [[TMP34]]
 ; CHECK-NEXT:    [[TMP12:%.*]] = call i1 @llvm.vector.reduce.or.nxv16i1(<vscale x 16 x i1> [[TMP33]])
 ; CHECK-NEXT:    [[TMP35:%.*]] = icmp eq i64 [[INDEX_NEXT3]], [[N_VEC]]
-; CHECK-NEXT:    [[TMP36:%.*]] = or i1 [[TMP12]], [[TMP35]]
-; CHECK-NEXT:    br i1 [[TMP36]], label [[MIDDLE_SPLIT:%.*]], label [[LOOP]], !llvm.loop [[LOOP0:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP12]], label [[VECTOR_EARLY_EXIT:%.*]], label [[LOOP_INC:%.*]]
+; CHECK-NEXT:    br i1 [[TMP12]], label [[VECTOR_EARLY_EXIT:%.*]], label [[LOOP_INC]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP35]], label [[MIDDLE_BLOCK:%.*]], label [[LOOP]], !llvm.loop [[LOOP0:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 510, [[N_VEC]]
 ; CHECK-NEXT:    br i1 [[CMP_N]], label [[LOOP_END:%.*]], label [[SCALAR_PH]]
@@ -92,7 +91,7 @@ define i64 @same_exit_block_pre_inc_use1() #0 {
 ; CHECK-NEXT:    [[TMP17:%.*]] = add i64 3, [[TMP16]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       scalar.ph:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT]], [[LOOP_INC]] ], [ 3, [[ENTRY:%.*]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT]], [[MIDDLE_BLOCK]] ], [ 3, [[ENTRY:%.*]] ]
 ; CHECK-NEXT:    br label [[LOOP1:%.*]]
 ; CHECK:       loop:
 ; CHECK-NEXT:    [[INDEX2:%.*]] = phi i64 [ [[INDEX_NEXT1:%.*]], [[LOOP_INC1:%.*]] ], [ [[INDEX]], [[SCALAR_PH]] ]
@@ -107,7 +106,7 @@ define i64 @same_exit_block_pre_inc_use1() #0 {
 ; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT1]], 513
 ; CHECK-NEXT:    br i1 [[EXITCOND]], label [[LOOP1]], label [[LOOP_END]], !llvm.loop [[LOOP3:![0-9]+]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[INDEX2]], [[LOOP1]] ], [ 67, [[LOOP_INC1]] ], [ 67, [[LOOP_INC]] ], [ [[TMP17]], [[VECTOR_EARLY_EXIT]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[INDEX2]], [[LOOP1]] ], [ 67, [[LOOP_INC1]] ], [ 67, [[MIDDLE_BLOCK]] ], [ [[TMP17]], [[VECTOR_EARLY_EXIT]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
diff --git a/llvm/test/Transforms/LoopVectorize/single-early-exit-cond-poison.ll b/llvm/test/Transforms/LoopVectorize/single-early-exit-cond-poison.ll
index 60b9070459662..899d7f8c5d7cc 100644
--- a/llvm/test/Transforms/LoopVectorize/single-early-exit-cond-poison.ll
+++ b/llvm/test/Transforms/LoopVectorize/single-early-exit-cond-poison.ll
@@ -16,19 +16,27 @@ define noundef i32 @f(i32 noundef %g) {
 ; VF4IC2-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x i32> [[BROADCAST_SPLATINSERT]], <4 x i32> poison, <4 x i32> zeroinitializer
 ; VF4IC2-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; VF4IC2:       [[VECTOR_BODY]]:
-; VF4IC2-NEXT:    [[TMP2:%.*]] = ashr <4 x i32> [[BROADCAST_SPLAT]], <i32 0, i32 8, i32 16, i32 24>
-; VF4IC2-NEXT:    [[TMP3:%.*]] = ashr <4 x i32> [[BROADCAST_SPLAT]], <i32 32, i32 40, i32 48, i32 56>
+; VF4IC2-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
+; VF4IC2-NEXT:    [[VEC_IND:%.*]] = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1]] ]
+; VF4IC2-NEXT:    [[STEP_ADD:%.*]] = add <4 x i32> [[VEC_IND]], splat (i32 4)
+; VF4IC2-NEXT:    [[TMP0:%.*]] = shl nuw nsw <4 x i32> [[VEC_IND]], splat (i32 3)
+; VF4IC2-NEXT:    [[TMP1:%.*]] = shl nuw nsw <4 x i32> [[STEP_ADD]], splat (i32 3)
+; VF4IC2-NEXT:    [[TMP2:%.*]] = ashr <4 x i32> [[BROADCAST_SPLAT]], [[TMP0]]
+; VF4IC2-NEXT:    [[TMP3:%.*]] = ashr <4 x i32> [[BROADCAST_SPLAT]], [[TMP1]]
 ; VF4IC2-NEXT:    [[TMP4:%.*]] = icmp ne <4 x i32> [[TMP2]], zeroinitializer
 ; VF4IC2-NEXT:    [[TMP5:%.*]] = icmp ne <4 x i32> [[TMP3]], zeroinitializer
+; VF4IC2-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 8
 ; VF4IC2-NEXT:    [[TMP17:%.*]] = freeze <4 x i1> [[TMP4]]
 ; VF4IC2-NEXT:    [[TMP18:%.*]] = freeze <4 x i1> [[TMP5]]
 ; VF4IC2-NEXT:    [[TMP6:%.*]] = or <4 x i1> [[TMP17]], [[TMP18]]
 ; VF4IC2-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP6]])
-; VF4IC2-NEXT:    br label %[[MIDDLE_SPLIT:.*]]
-; VF4IC2:       [[MIDDLE_SPLIT]]:
-; VF4IC2-NEXT:    [[TMP8:%.*]] = extractelement <4 x i32> [[TMP3]], i32 3
-; VF4IC2-NEXT:    br i1 [[TMP7]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; VF4IC2-NEXT:    [[TMP16:%.*]] = icmp eq i32 [[INDEX_NEXT]], 8
+; VF4IC2-NEXT:    [[VEC_IND_NEXT]] = add nuw nsw <4 x i32> [[STEP_ADD]], splat (i32 4)
+; VF4IC2-NEXT:    br i1 [[TMP7]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; VF4IC2:       [[VECTOR_BODY_MULTI_COND_1]]:
+; VF4IC2-NEXT:    br i1 [[TMP16]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; VF4IC2:       [[MIDDLE_BLOCK]]:
+; VF4IC2-NEXT:    [[TMP8:%.*]] = extractelement <4 x i32> [[TMP3]], i32 3
 ; VF4IC2-NEXT:    br label %[[RETURN:.*]]
 ; VF4IC2:       [[VECTOR_EARLY_EXIT]]:
 ; VF4IC2-NEXT:    [[TMP9:%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v4i1(<4 x i1> [[TMP5]], i1 false)
@@ -38,9 +46,10 @@ define noundef i32 @f(i32 noundef %g) {
 ; VF4IC2-NEXT:    [[TMP13:%.*]] = icmp ne i64 [[TMP11]], 4
 ; VF4IC2-NEXT:    [[TMP14:%.*]] = select i1 [[TMP13]], i64 [[TMP12]], i64 [[TMP10]]
 ; VF4IC2-NEXT:    [[TMP15:%.*]] = trunc i64 [[TMP14]] to i32
+; VF4IC2-NEXT:    [[TMP19:%.*]] = add i32 [[INDEX]], [[TMP15]]
 ; VF4IC2-NEXT:    br label %[[RETURN]]
 ; VF4IC2:       [[RETURN]]:
-; VF4IC2-NEXT:    [[RES:%.*]] = phi i32 [ [[TMP8]], %[[MIDDLE_BLOCK]] ], [ [[TMP15]], %[[VECTOR_EARLY_EXIT]] ]
+; VF4IC2-NEXT:    [[RES:%.*]] = phi i32 [ [[TMP8]], %[[MIDDLE_BLOCK]] ], [ [[TMP19]], %[[VECTOR_EARLY_EXIT]] ]
 ; VF4IC2-NEXT:    ret i32 [[RES]]
 ;
 ; VF8IC1-LABEL: define noundef i32 @f(
@@ -52,22 +61,29 @@ define noundef i32 @f(i32 noundef %g) {
 ; VF8IC1-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <8 x i32> [[BROADCAST_SPLATINSERT]], <8 x i32> poison, <8 x i32> zeroinitializer
 ; VF8IC1-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; VF8IC1:       [[VECTOR_BODY]]:
-; VF8IC1-NEXT:    [[TMP1:%.*]] = ashr <8 x i32> [[BROADCAST_SPLAT]], <i32 0, i32 8, i32 16, i32 24, i32 32, i32 40, i32 48, i32 56>
+; VF8IC1-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
+; VF8IC1-NEXT:    [[VEC_IND:%.*]] = phi <8 x i32> [ <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1]] ]
+; VF8IC1-NEXT:    [[TMP0:%.*]] = shl nuw nsw <8 x i32> [[VEC_IND]], splat (i32 3)
+; VF8IC1-NEXT:    [[TMP1:%.*]] = ashr <8 x i32> [[BROADCAST_SPLAT]], [[TMP0]]
 ; VF8IC1-NEXT:    [[TMP2:%.*]] = icmp ne <8 x i32> [[TMP1]], zeroinitializer
+; VF8IC1-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 8
 ; VF8IC1-NEXT:    [[TMP8:%.*]] = freeze <8 x i1> [[TMP2]]
 ; VF8IC1-NEXT:    [[TMP3:%.*]] = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> [[TMP8]])
-; VF8IC1-NEXT:    br label %[[MIDDLE_SPLIT:.*]]
-; VF8IC1:       [[MIDDLE_SPLIT]]:
-; VF8IC1-NEXT:    [[TMP4:%.*]] = extractelement <8 x i32> [[TMP1]], i32 7
-; VF8IC1-NEXT:    br i1 [[TMP3]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; VF8IC1-NEXT:    [[TMP7:%.*]] = icmp eq i32 [[INDEX_NEXT]], 8
+; VF8IC1-NEXT:    [[VEC_IND_NEXT]] = add nuw nsw <8 x i32> [[VEC_IND]], splat (i32 8)
+; VF8IC1-NEXT:    br i1 [[TMP3]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; VF8IC1:       [[VECTOR_BODY_MULTI_COND_1]]:
+; VF8IC1-NEXT:    br i1 [[TMP7]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; VF8IC1:       [[MIDDLE_BLOCK]]:
+; VF8IC1-NEXT:    [[TMP4:%.*]] = extractelement <8 x i32> [[TMP1]], i32 7
 ; VF8IC1-NEXT:    br label %[[RETURN:.*]]
 ; VF8IC1:       [[VECTOR_EARLY_EXIT]]:
 ; VF8IC1-NEXT:    [[TMP5:%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v8i1(<8 x i1> [[TMP2]], i1 false)
 ; VF8IC1-NEXT:    [[TMP6:%.*]] = trunc i64 [[TMP5]] to i32
+; VF8IC1-NEXT:    [[TMP9:%.*]] = add i32 [[INDEX]], [[TMP6]]
 ; VF8IC1-NEXT:    br label %[[RETURN]]
 ; VF8IC1:       [[RETURN]]:
-; VF8IC1-NEXT:    [[RES:%.*]] = phi i32 [ [[TMP4]], %[[MIDDLE_BLOCK]] ], [ [[TMP6]], %[[VECTOR_EARLY_EXIT]] ]
+; VF8IC1-NEXT:    [[RES:%.*]] = phi i32 [ [[TMP4]], %[[MIDDLE_BLOCK]] ], [ [[TMP9]], %[[VECTOR_EARLY_EXIT]] ]
 ; VF8IC1-NEXT:    ret i32 [[RES]]
 ;
 entry:
diff --git a/llvm/test/Transforms/LoopVectorize/single-early-exit-deref-assumptions.ll b/llvm/test/Transforms/LoopVectorize/single-early-exit-deref-assumptions.ll
index 753e688f08670..adbcd21e346c5 100644
--- a/llvm/test/Transforms/LoopVectorize/single-early-exit-deref-assumptions.ll
+++ b/llvm/test/Transforms/LoopVectorize/single-early-exit-deref-assumptions.ll
@@ -11,7 +11,7 @@ define i64 @early_exit_alignment_and_deref_known_via_assumption_with_constant_si
 ; CHECK:       [[VECTOR_PH]]:
 ; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; CHECK:       [[VECTOR_BODY]]:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], %[[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
 ; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[INDEX1]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP0]], align 1
 ; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[INDEX1]]
@@ -21,10 +21,9 @@ define i64 @early_exit_alignment_and_deref_known_via_assumption_with_constant_si
 ; CHECK-NEXT:    [[TMP3:%.*]] = freeze <4 x i1> [[TMP4]]
 ; CHECK-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 1024
-; CHECK-NEXT:    [[TMP7:%.*]] = or i1 [[TMP5]], [[TMP6]]
-; CHECK-NEXT:    br i1 [[TMP7]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
-; CHECK:       [[MIDDLE_SPLIT]]:
-; CHECK-NEXT:    br i1 [[TMP5]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; CHECK-NEXT:    br i1 [[TMP5]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1]]:
+; CHECK-NEXT:    br i1 [[TMP6]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; CHECK:       [[MIDDLE_BLOCK]]:
 ; CHECK-NEXT:    br label %[[LOOP_END:.*]]
 ; CHECK:       [[VECTOR_EARLY_EXIT]]:
@@ -122,7 +121,7 @@ define i64 @early_exit_alignment_and_deref_known_via_assumption_n_not_zero(ptr n
 ; CHECK-NEXT:    [[N_VEC:%.*]] = sub i64 [[N]], [[N_MOD_VF]]
 ; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; CHECK:       [[VECTOR_BODY]]:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], %[[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
 ; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[INDEX1]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP0]], align 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[INDEX1]]
@@ -132,16 +131,14 @@ define i64 @early_exit_alignment_and_deref_known_via_assumption_n_not_zero(ptr n
 ; CHECK-NEXT:    [[TMP3:%.*]] = freeze <4 x i1> [[TMP2]]
 ; CHECK-NEXT:    [[TMP4:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i64 [[INDEX_NEXT3]], [[N_VEC]]
-; CHECK-NEXT:    [[TMP6:%.*]] = or i1 [[TMP4]], [[TMP5]]
-; CHECK-NEXT:    br i1 [[TMP6]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
-; CHECK:       [[MIDDLE_SPLIT]]:
-; CHECK-NEXT:    br i1 [[TMP4]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; CHECK-NEXT:    br i1 [[TMP4]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1]]:
+; CHECK-NEXT:    br i1 [[TMP5]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
 ; CHECK:       [[MIDDLE_BLOCK]]:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[N]], [[N_VEC]]
+; CHECK-NEXT:    [[IND_ESCAPE:%.*]] = sub i64 [[N_VEC]], 1
 ; CHECK-NEXT:    br i1 [[CMP_N]], label %[[LOOP_END_LOOPEXIT:.*]], label %[[SCALAR_PH]]
 ; CHECK:       [[VECTOR_EARLY_EXIT]]:
-; CHECK-NEXT:    [[TMP7:%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v4i1(<4 x i1> [[TMP2]], i1 false)
-; CHECK-NEXT:    [[TMP8:%.*]] = add i64 [[INDEX1]], [[TMP7]]
 ; CHECK-NEXT:    br label %[[LOOP_END_LOOPEXIT]]
 ; CHECK:       [[SCALAR_PH]]:
 ; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i64 [ [[N_VEC]], %[[MIDDLE_BLOCK]] ], [ 0, %[[LOOP_PREHEADER]] ]
@@ -159,7 +156,7 @@ define i64 @early_exit_alignment_and_deref_known_via_assumption_n_not_zero(ptr n
 ; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], [[N]]
 ; CHECK-NEXT:    br i1 [[EXITCOND]], label %[[LOOP]], label %[[LOOP_END_LOOPEXIT]], !llvm.loop [[LOOP4:![0-9]+]]
 ; CHECK:       [[LOOP_END_LOOPEXIT]]:
-; CHECK-NEXT:    [[RETVAL_PH:%.*]] = phi i64 [ -1, %[[LOOP_INC]] ], [ [[INDEX]], %[[LOOP]] ], [ -1, %[[MIDDLE_BLOCK]] ], [ [[TMP8]], %[[VECTOR_EARLY_EXIT]] ]
+; CHECK-NEXT:    [[RETVAL_PH:%.*]] = phi i64 [ -1, %[[LOOP_INC]] ], [ [[INDEX]], %[[LOOP]] ], [ [[IND_ESCAPE]], %[[MIDDLE_BLOCK]] ], [ -1, %[[VECTOR_EARLY_EXIT]] ]
 ; CHECK-NEXT:    br label %[[LOOP_END]]
 ; CHECK:       [[LOOP_END]]:
 ; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[RETVAL_PH]], %[[LOOP_END_LOOPEXIT]] ]
@@ -319,7 +316,7 @@ define i64 @early_exit_alignment_and_deref_known_via_assumption_n_not_zero_i16_p
 ; CHECK-NEXT:    [[IV_NEXT1:%.*]] = getelementptr i8, ptr [[A]], i64 [[TMP3]]
 ; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; CHECK:       [[VECTOR_BODY]]:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = mul i64 [[INDEX]], 2
 ; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[A]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i16>, ptr [[NEXT_GEP]], align 2
@@ -328,18 +325,14 @@ define i64 @early_exit_alignment_and_deref_known_via_assumption_n_not_zero_i16_p
 ; CHECK-NEXT:    [[TMP6:%.*]] = freeze <4 x i1> [[TMP5]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP6]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
-; CHECK:       [[MIDDLE_SPLIT]]:
-; CHECK-NEXT:    br i1 [[TMP7]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1]]:
+; CHECK-NEXT:    br i1 [[TMP8]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
 ; CHECK:       [[MIDDLE_BLOCK]]:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[TMP2]], [[N_VEC]]
+; CHECK-NEXT:    [[IND_ESCAPE:%.*]] = getelementptr i8, ptr [[IV_NEXT1]], i64 -2
 ; CHECK-NEXT:    br i1 [[CMP_N]], label %[[EXIT_LOOPEXIT:.*]], label %[[SCALAR_PH]]
 ; CHECK:       [[VECTOR_EARLY_EXIT]]:
-; CHECK-NEXT:    [[TMP10:%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v4i1(<4 x i1> [[TMP5]], i1 false)
-; CHECK-NEXT:    [[TMP11:%.*]] = add i64 [[INDEX]], [[TMP10]]
-; CHECK-NEXT:    [[TMP12:%.*]] = mul i64 [[TMP11]], 2
-; CHECK-NEXT:    [[TMP13:%.*]] = getelementptr i8, ptr [[A]], i64 [[TMP12]]
 ; CHECK-NEXT:    br label %[[EXIT_LOOPEXIT]]
 ; CHECK:       [[SCALAR_PH]]:
 ; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi ptr [ [[IV_NEXT1]], %[[MIDDLE_BLOCK]] ], [ [[A]], %[[LOOP_HEADER_PREHEADER]] ]
@@ -354,7 +347,7 @@ define i64 @early_exit_alignment_and_deref_known_via_assumption_n_not_zero_i16_p
 ; CHECK-NEXT:    [[EC:%.*]] = icmp eq ptr [[IV_NEXT]], [[A_END]]
 ; CHECK-NEXT:    br i1 [[EC]], label %[[EXIT_LOOPEXIT]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP6:![0-9]+]]
 ; CHECK:       [[EXIT_LOOPEXIT]]:
-; CHECK-NEXT:    [[P_PH:%.*]] = phi ptr [ [[A_END]], %[[LOOP_LATCH]] ], [ [[IV]], %[[LOOP_HEADER]] ], [ [[A_END]], %[[MIDDLE_BLOCK]] ], [ [[TMP13]], %[[VECTOR_EARLY_EXIT]] ]
+; CHECK-NEXT:    [[P_PH:%.*]] = phi ptr [ [[A_END]], %[[LOOP_LATCH]] ], [ [[IV]], %[[LOOP_HEADER]] ], [ [[IND_ESCAPE]], %[[MIDDLE_BLOCK]] ], [ [[A_END]], %[[VECTOR_EARLY_EXIT]] ]
 ; CHECK-NEXT:    br label %[[EXIT]]
 ; CHECK:       [[EXIT]]:
 ; CHECK-NEXT:    [[P:%.*]] = phi ptr [ [[A]], %[[ENTRY]] ], [ [[P_PH]], %[[EXIT_LOOPEXIT]] ]
@@ -414,7 +407,7 @@ define ptr @find_deref_pointer_distance_align_attribute_argument(ptr align 2 %fi
 ; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[FIRST]], i64 [[TMP4]]
 ; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; CHECK:       [[VECTOR_BODY]]:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = mul i64 [[INDEX]], 2
 ; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[FIRST]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i16>, ptr [[NEXT_GEP]], align 2
@@ -423,17 +416,18 @@ define ptr @find_deref_pointer_distance_align_attribute_argument(ptr align 2 %fi
 ; CHECK-NEXT:    [[TMP7:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP8:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP7]])
 ; CHECK-NEXT:    [[TMP9:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
-; CHECK-NEXT:    [[TMP10:%.*]] = or i1 [[TMP8]], [[TMP9]]
-; CHECK-NEXT:    br i1 [[TMP10]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP7:![0-9]+]]
-; CHECK:       [[MIDDLE_SPLIT]]:
-; CHECK-NEXT:    br i1 [[TMP8]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; CHECK-NEXT:    br i1 [[TMP8]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1]]:
+; CHECK-NEXT:    br i1 [[TMP9]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP7:![0-9]+]]
 ; CHECK:       [[MIDDLE_BLOCK]]:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[TMP3]], [[N_VEC]]
+; CHECK-NEXT:    [[IND_ESCAPE:%.*]] = getelementptr i8, ptr [[TMP5]], i64 -2
 ; CHECK-NEXT:    br i1 [[CMP_N]], label %[[EXIT_LOOPEXIT:.*]], label %[[SCALAR_PH]]
 ; CHECK:       [[VECTOR_EARLY_EXIT]]:
 ; CHECK-NEXT:    [[TMP11:%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v4i1(<4 x i1> [[TMP6]], i1 false)
 ; CHECK-NEXT:    [[TMP12:%.*]] = add i64 [[INDEX]], [[TMP11]]
-; CHECK-NEXT:    [[TMP13:%.*]] = mul i64 [[TMP12]], 2
+; CHECK-NEXT:    [[TMP15:%.*]] = add i64 [[TMP12]], 1
+; CHECK-NEXT:    [[TMP13:%.*]] = mul i64 [[TMP15]], 2
 ; CHECK-NEXT:    [[TMP14:%.*]] = getelementptr i8, ptr [[FIRST]], i64 [[TMP13]]
 ; CHECK-NEXT:    br label %[[EXIT_LOOPEXIT]]
 ; CHECK:       [[SCALAR_PH]]:
@@ -449,7 +443,7 @@ define ptr @find_deref_pointer_distance_align_attribute_argument(ptr align 2 %fi
 ; CHECK-NEXT:    [[C_2:%.*]] = icmp eq ptr [[IV_NEXT]], [[LAST]]
 ; CHECK-NEXT:    br i1 [[C_2]], label %[[EXIT_LOOPEXIT]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP8:![0-9]+]]
 ; CHECK:       [[EXIT_LOOPEXIT]]:
-; CHECK-NEXT:    [[FIRST_ADDR_0_LCSSA_I_PH:%.*]] = phi ptr [ [[IV_NEXT]], %[[LOOP_LATCH]] ], [ [[IV]], %[[LOOP_HEADER]] ], [ [[TMP5]], %[[MIDDLE_BLOCK]] ], [ [[TMP14]], %[[VECTOR_EARLY_EXIT]] ]
+; CHECK-NEXT:    [[FIRST_ADDR_0_LCSSA_I_PH:%.*]] = phi ptr [ [[IV_NEXT]], %[[LOOP_LATCH]] ], [ [[IV]], %[[LOOP_HEADER]] ], [ [[IND_ESCAPE]], %[[MIDDLE_BLOCK]] ], [ [[TMP14]], %[[VECTOR_EARLY_EXIT]] ]
 ; CHECK-NEXT:    br label %[[EXIT]]
 ; CHECK:       [[EXIT]]:
 ; CHECK-NEXT:    [[FIRST_ADDR_0_LCSSA_I:%.*]] = phi ptr [ [[FIRST]], %[[ENTRY]] ], [ [[FIRST_ADDR_0_LCSSA_I_PH]], %[[EXIT_LOOPEXIT]] ]
@@ -508,7 +502,7 @@ define ptr @find_deref_pointer_distance_align_assumption(ptr %first, ptr %last)
 ; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[FIRST]], i64 [[TMP4]]
 ; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; CHECK:       [[VECTOR_BODY]]:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = mul i64 [[INDEX]], 2
 ; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[FIRST]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i16>, ptr [[NEXT_GEP]], align 2
@@ -517,17 +511,18 @@ define ptr @find_deref_pointer_distance_align_assumption(ptr %first, ptr %last)
 ; CHECK-NEXT:    [[TMP7:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP8:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP7]])
 ; CHECK-NEXT:    [[TMP9:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
-; CHECK-NEXT:    [[TMP10:%.*]] = or i1 [[TMP8]], [[TMP9]]
-; CHECK-NEXT:    br i1 [[TMP10]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]]
-; CHECK:       [[MIDDLE_SPLIT]]:
-; CHECK-NEXT:    br i1 [[TMP8]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; CHECK-NEXT:    br i1 [[TMP8]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1]]:
+; CHECK-NEXT:    br i1 [[TMP9]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]]
 ; CHECK:       [[MIDDLE_BLOCK]]:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[TMP3]], [[N_VEC]]
+; CHECK-NEXT:    [[IND_ESCAPE:%.*]] = getelementptr i8, ptr [[TMP5]], i64 -2
 ; CHECK-NEXT:    br i1 [[CMP_N]], label %[[EXIT_LOOPEXIT:.*]], label %[[SCALAR_PH]]
 ; CHECK:       [[VECTOR_EARLY_EXIT]]:
 ; CHECK-NEXT:    [[TMP11:%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v4i1(<4 x i1> [[TMP6]], i1 false)
 ; CHECK-NEXT:    [[TMP12:%.*]] = add i64 [[INDEX]], [[TMP11]]
-; CHECK-NEXT:    [[TMP13:%.*]] = mul i64 [[TMP12]], 2
+; CHECK-NEXT:    [[TMP15:%.*]] = add i64 [[TMP12]], 1
+; CHECK-NEXT:    [[TMP13:%.*]] = mul i64 [[TMP15]], 2
 ; CHECK-NEXT:    [[TMP14:%.*]] = getelementptr i8, ptr [[FIRST]], i64 [[TMP13]]
 ; CHECK-NEXT:    br label %[[EXIT_LOOPEXIT]]
 ; CHECK:       [[SCALAR_PH]]:
@@ -543,7 +538,7 @@ define ptr @find_deref_pointer_distance_align_assumption(ptr %first, ptr %last)
 ; CHECK-NEXT:    [[C_2:%.*]] = icmp eq ptr [[IV_NEXT]], [[LAST]]
 ; CHECK-NEXT:    br i1 [[C_2]], label %[[EXIT_LOOPEXIT]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP10:![0-9]+]]
 ; CHECK:       [[EXIT_LOOPEXIT]]:
-; CHECK-NEXT:    [[FIRST_ADDR_0_LCSSA_I_PH:%.*]] = phi ptr [ [[IV_NEXT]], %[[LOOP_LATCH]] ], [ [[IV]], %[[LOOP_HEADER]] ], [ [[TMP5]], %[[MIDDLE_BLOCK]] ], [ [[TMP14]], %[[VECTOR_EARLY_EXIT]] ]
+; CHECK-NEXT:    [[FIRST_ADDR_0_LCSSA_I_PH:%.*]] = phi ptr [ [[IV_NEXT]], %[[LOOP_LATCH]] ], [ [[IV]], %[[LOOP_HEADER]] ], [ [[IND_ESCAPE]], %[[MIDDLE_BLOCK]] ], [ [[TMP14]], %[[VECTOR_EARLY_EXIT]] ]
 ; CHECK-NEXT:    br label %[[EXIT]]
 ; CHECK:       [[EXIT]]:
 ; CHECK-NEXT:    [[FIRST_ADDR_0_LCSSA_I:%.*]] = phi ptr [ [[FIRST]], %[[ENTRY]] ], [ [[FIRST_ADDR_0_LCSSA_I_PH]], %[[EXIT_LOOPEXIT]] ]
@@ -585,7 +580,7 @@ define i64 @early_exit_alignment_and_deref_known_via_assumption_with_constant_si
 ; CHECK:       [[VECTOR_PH]]:
 ; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; CHECK:       [[VECTOR_BODY]]:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], %[[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
 ; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[INDEX1]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[ARRAYIDX2]], align 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[INDEX1]]
@@ -595,10 +590,9 @@ define i64 @early_exit_alignment_and_deref_known_via_assumption_with_constant_si
 ; CHECK-NEXT:    [[TMP3:%.*]] = freeze <4 x i1> [[TMP2]]
 ; CHECK-NEXT:    [[TMP4:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 1024
-; CHECK-NEXT:    [[TMP6:%.*]] = or i1 [[TMP4]], [[TMP5]]
-; CHECK-NEXT:    br i1 [[TMP6]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP11:![0-9]+]]
-; CHECK:       [[MIDDLE_SPLIT]]:
-; CHECK-NEXT:    br i1 [[TMP4]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; CHECK-NEXT:    br i1 [[TMP4]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1]]:
+; CHECK-NEXT:    br i1 [[TMP5]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP11:![0-9]+]]
 ; CHECK:       [[MIDDLE_BLOCK]]:
 ; CHECK-NEXT:    br label %[[LOOP_END:.*]]
 ; CHECK:       [[VECTOR_EARLY_EXIT]]:
@@ -723,7 +717,7 @@ define i64 @find_if_pointer_distance_deref_via_assumption(ptr %vec) nofree nosyn
 ; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[BEGIN]], i64 [[TMP4]]
 ; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; CHECK:       [[VECTOR_BODY]]:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = mul i64 [[INDEX]], 2
 ; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[BEGIN]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i16>, ptr [[NEXT_GEP]], align 2
@@ -732,10 +726,9 @@ define i64 @find_if_pointer_distance_deref_via_assumption(ptr %vec) nofree nosyn
 ; CHECK-NEXT:    [[TMP7:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP8:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP7]])
 ; CHECK-NEXT:    [[TMP9:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
-; CHECK-NEXT:    [[TMP10:%.*]] = or i1 [[TMP8]], [[TMP9]]
-; CHECK-NEXT:    br i1 [[TMP10]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP12:![0-9]+]]
-; CHECK:       [[MIDDLE_SPLIT]]:
-; CHECK-NEXT:    br i1 [[TMP8]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; CHECK-NEXT:    br i1 [[TMP8]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1]]:
+; CHECK-NEXT:    br i1 [[TMP9]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP12:![0-9]+]]
 ; CHECK:       [[MIDDLE_BLOCK]]:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[TMP3]], [[N_VEC]]
 ; CHECK-NEXT:    br i1 [[CMP_N]], label %[[EXIT_LOOPEXIT:.*]], label %[[SCALAR_PH]]
diff --git a/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave-hint.ll b/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave-hint.ll
index 2183c520d9e81..cd31f40e5e52c 100644
--- a/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave-hint.ll
+++ b/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave-hint.ll
@@ -12,7 +12,7 @@ define i64 @multi_exiting_to_different_exits_live_in_exit_values() {
 ; VF4IC4:       [[VECTOR_PH]]:
 ; VF4IC4-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; VF4IC4:       [[VECTOR_BODY]]:
-; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
+; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
 ; VF4IC4-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i64 [[INDEX]]
 ; VF4IC4-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 4
 ; VF4IC4-NEXT:    [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 8
@@ -35,10 +35,9 @@ define i64 @multi_exiting_to_different_exits_live_in_exit_values() {
 ; VF4IC4-NEXT:    [[TMP11:%.*]] = or <4 x i1> [[TMP16]], [[TMP17]]
 ; VF4IC4-NEXT:    [[TMP3:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP11]])
 ; VF4IC4-NEXT:    [[TMP4:%.*]] = icmp eq i64 [[INDEX_NEXT]], 128
-; VF4IC4-NEXT:    [[TMP5:%.*]] = or i1 [[TMP3]], [[TMP4]]
-; VF4IC4-NEXT:    br i1 [[TMP5]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
-; VF4IC4:       [[MIDDLE_SPLIT]]:
-; VF4IC4-NEXT:    br i1 [[TMP3]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; VF4IC4-NEXT:    br i1 [[TMP3]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; VF4IC4:       [[VECTOR_BODY_MULTI_COND_1]]:
+; VF4IC4-NEXT:    br i1 [[TMP4]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; VF4IC4:       [[MIDDLE_BLOCK]]:
 ; VF4IC4-NEXT:    br label %[[E2:.*]]
 ; VF4IC4:       [[VECTOR_EARLY_EXIT]]:
diff --git a/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave-only.ll b/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave-only.ll
index a50ce969da7f4..da3a1f40db24f 100644
--- a/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave-only.ll
+++ b/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave-only.ll
@@ -12,7 +12,7 @@ define i8 @iv_used_in_exit_with_math(i8 noundef %g) {
 ; CHECK:       [[VECTOR_PH]]:
 ; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; CHECK:       [[VECTOR_BODY]]:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = trunc i32 [[INDEX]] to i8
 ; CHECK-NEXT:    [[TMP0:%.*]] = add i8 [[OFFSET_IDX]], 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = shl nuw i8 1, [[OFFSET_IDX]]
@@ -26,10 +26,9 @@ define i8 @iv_used_in_exit_with_math(i8 noundef %g) {
 ; CHECK-NEXT:    [[TMP13:%.*]] = freeze i1 [[TMP8]]
 ; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP12]], [[TMP13]]
 ; CHECK-NEXT:    [[TMP10:%.*]] = icmp eq i32 [[INDEX_NEXT]], 4
-; CHECK-NEXT:    [[TMP11:%.*]] = or i1 [[TMP9]], [[TMP10]]
-; CHECK-NEXT:    br i1 [[TMP11]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
-; CHECK:       [[MIDDLE_SPLIT]]:
-; CHECK-NEXT:    br i1 [[TMP9]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; CHECK-NEXT:    br i1 [[TMP9]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1]]:
+; CHECK-NEXT:    br i1 [[TMP10]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; CHECK:       [[MIDDLE_BLOCK]]:
 ; CHECK-NEXT:    br label %[[RETURN:.*]]
 ; CHECK:       [[VECTOR_EARLY_EXIT]]:
@@ -82,7 +81,7 @@ define i32 @iv_used_in_exit_with_loads(ptr align 4 dereferenceable(128) %src) {
 ; CHECK:       [[VECTOR_PH]]:
 ; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; CHECK:       [[VECTOR_BODY]]:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
 ; CHECK-NEXT:    [[TMP0:%.*]] = add i32 [[INDEX]], 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i32 [[INDEX]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i32 [[TMP0]]
@@ -95,10 +94,9 @@ define i32 @iv_used_in_exit_with_loads(ptr align 4 dereferenceable(128) %src) {
 ; CHECK-NEXT:    [[TMP13:%.*]] = freeze i1 [[TMP8]]
 ; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP12]], [[TMP13]]
 ; CHECK-NEXT:    [[TMP10:%.*]] = icmp eq i32 [[INDEX_NEXT]], 32
-; CHECK-NEXT:    [[TMP11:%.*]] = or i1 [[TMP9]], [[TMP10]]
-; CHECK-NEXT:    br i1 [[TMP11]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
-; CHECK:       [[MIDDLE_SPLIT]]:
-; CHECK-NEXT:    br i1 [[TMP9]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; CHECK-NEXT:    br i1 [[TMP9]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1]]:
+; CHECK-NEXT:    br i1 [[TMP10]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
 ; CHECK:       [[MIDDLE_BLOCK]]:
 ; CHECK-NEXT:    br label %[[RETURN:.*]]
 ; CHECK:       [[VECTOR_EARLY_EXIT]]:
diff --git a/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave.ll b/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave.ll
index 03c4a73593ba3..5fb833daf5364 100644
--- a/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave.ll
+++ b/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave.ll
@@ -12,7 +12,7 @@ define i64 @multi_exiting_to_different_exits_live_in_exit_values() {
 ; VF4IC4:       vector.ph:
 ; VF4IC4-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; VF4IC4:       vector.body:
-; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; VF4IC4-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i64 [[INDEX]]
 ; VF4IC4-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 4
 ; VF4IC4-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 8
@@ -35,10 +35,9 @@ define i64 @multi_exiting_to_different_exits_live_in_exit_values() {
 ; VF4IC4-NEXT:    [[TMP11:%.*]] = or <4 x i1> [[TMP15]], [[TMP16]]
 ; VF4IC4-NEXT:    [[TMP3:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP11]])
 ; VF4IC4-NEXT:    [[TMP4:%.*]] = icmp eq i64 [[INDEX_NEXT]], 128
-; VF4IC4-NEXT:    [[TMP5:%.*]] = or i1 [[TMP3]], [[TMP4]]
-; VF4IC4-NEXT:    br i1 [[TMP5]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
-; VF4IC4:       middle.split:
-; VF4IC4-NEXT:    br i1 [[TMP3]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; VF4IC4-NEXT:    br i1 [[TMP3]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4-NEXT:    br i1 [[TMP4]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[E2:%.*]]
 ; VF4IC4:       vector.early.exit:
@@ -85,7 +84,7 @@ define i64 @same_exit_block_pre_inc_use1() {
 ; VF4IC4:       vector.ph:
 ; VF4IC4-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; VF4IC4:       vector.body:
-; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; VF4IC4-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX]]
 ; VF4IC4-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; VF4IC4-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[TMP0]], i64 4
@@ -117,10 +116,9 @@ define i64 @same_exit_block_pre_inc_use1() {
 ; VF4IC4-NEXT:    [[TMP16:%.*]] = or <4 x i1> [[TMP15]], [[TMP36]]
 ; VF4IC4-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP16]])
 ; VF4IC4-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT]], 64
-; VF4IC4-NEXT:    [[TMP7:%.*]] = or i1 [[TMP5]], [[TMP6]]
-; VF4IC4-NEXT:    br i1 [[TMP7]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
-; VF4IC4:       middle.split:
-; VF4IC4-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; VF4IC4-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[LOOP_END:%.*]]
 ; VF4IC4:       vector.early.exit:
@@ -142,7 +140,7 @@ define i64 @same_exit_block_pre_inc_use1() {
 ; VF4IC4-NEXT:    [[TMP10:%.*]] = add i64 3, [[TMP9]]
 ; VF4IC4-NEXT:    br label [[LOOP_END]]
 ; VF4IC4:       loop.end:
-; VF4IC4-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[TMP10]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK]] ]
+; VF4IC4-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[TMP10]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK1]] ]
 ; VF4IC4-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -181,7 +179,7 @@ define ptr @same_exit_block_pre_inc_use1_ivptr() {
 ; VF4IC4:       vector.ph:
 ; VF4IC4-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; VF4IC4:       vector.body:
-; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; VF4IC4-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[P1]], i64 [[INDEX]]
 ; VF4IC4-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr [[NEXT_GEP]], i64 4
 ; VF4IC4-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[NEXT_GEP]], i64 8
@@ -204,10 +202,9 @@ define ptr @same_exit_block_pre_inc_use1_ivptr() {
 ; VF4IC4-NEXT:    [[TMP9:%.*]] = or <4 x i1> [[TMP33]], [[TMP34]]
 ; VF4IC4-NEXT:    [[TMP10:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP9]])
 ; VF4IC4-NEXT:    [[TMP11:%.*]] = icmp eq i64 [[INDEX_NEXT]], 1024
-; VF4IC4-NEXT:    [[TMP12:%.*]] = or i1 [[TMP10]], [[TMP11]]
-; VF4IC4-NEXT:    br i1 [[TMP12]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
-; VF4IC4:       middle.split:
-; VF4IC4-NEXT:    br i1 [[TMP10]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; VF4IC4-NEXT:    br i1 [[TMP10]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4-NEXT:    br i1 [[TMP11]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[LOOP_END:%.*]]
 ; VF4IC4:       vector.early.exit:
@@ -229,7 +226,7 @@ define ptr @same_exit_block_pre_inc_use1_ivptr() {
 ; VF4IC4-NEXT:    [[TMP8:%.*]] = getelementptr i8, ptr [[P1]], i64 [[TMP7]]
 ; VF4IC4-NEXT:    br label [[LOOP_END]]
 ; VF4IC4:       loop.end:
-; VF4IC4-NEXT:    [[RETVAL:%.*]] = phi ptr [ [[TMP8]], [[VECTOR_EARLY_EXIT]] ], [ [[PTREND]], [[MIDDLE_BLOCK]] ]
+; VF4IC4-NEXT:    [[RETVAL:%.*]] = phi ptr [ [[TMP8]], [[VECTOR_EARLY_EXIT]] ], [ [[PTREND]], [[MIDDLE_BLOCK1]] ]
 ; VF4IC4-NEXT:    ret ptr [[RETVAL]]
 ;
 entry:
@@ -265,7 +262,7 @@ define i64 @same_exit_block_post_inc_use() {
 ; VF4IC4:       vector.ph:
 ; VF4IC4-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; VF4IC4:       vector.body:
-; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; VF4IC4-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX]]
 ; VF4IC4-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; VF4IC4-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[TMP0]], i64 4
@@ -297,10 +294,9 @@ define i64 @same_exit_block_post_inc_use() {
 ; VF4IC4-NEXT:    [[TMP16:%.*]] = or <4 x i1> [[TMP15]], [[TMP36]]
 ; VF4IC4-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP16]])
 ; VF4IC4-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT]], 64
-; VF4IC4-NEXT:    [[TMP7:%.*]] = or i1 [[TMP5]], [[TMP6]]
-; VF4IC4-NEXT:    br i1 [[TMP7]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
-; VF4IC4:       middle.split:
-; VF4IC4-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; VF4IC4-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[LOOP_END:%.*]]
 ; VF4IC4:       vector.early.exit:
@@ -322,7 +318,7 @@ define i64 @same_exit_block_post_inc_use() {
 ; VF4IC4-NEXT:    [[TMP10:%.*]] = add i64 3, [[TMP9]]
 ; VF4IC4-NEXT:    br label [[LOOP_END]]
 ; VF4IC4:       loop.end:
-; VF4IC4-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[TMP10]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK]] ]
+; VF4IC4-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[TMP10]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK1]] ]
 ; VF4IC4-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -362,7 +358,7 @@ define i64 @diff_exit_block_pre_inc_use1() {
 ; VF4IC4:       vector.ph:
 ; VF4IC4-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; VF4IC4:       vector.body:
-; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; VF4IC4-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX]]
 ; VF4IC4-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; VF4IC4-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[TMP0]], i64 4
@@ -394,10 +390,9 @@ define i64 @diff_exit_block_pre_inc_use1() {
 ; VF4IC4-NEXT:    [[TMP16:%.*]] = or <4 x i1> [[TMP15]], [[TMP36]]
 ; VF4IC4-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP16]])
 ; VF4IC4-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT]], 64
-; VF4IC4-NEXT:    [[TMP7:%.*]] = or i1 [[TMP5]], [[TMP6]]
-; VF4IC4-NEXT:    br i1 [[TMP7]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
-; VF4IC4:       middle.split:
-; VF4IC4-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; VF4IC4-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[LOOP_END:%.*]]
 ; VF4IC4:       vector.early.exit:
@@ -464,7 +459,7 @@ define i64 @diff_exit_block_post_inc_use1() {
 ; VF4IC4:       vector.ph:
 ; VF4IC4-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; VF4IC4:       vector.body:
-; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; VF4IC4-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX]]
 ; VF4IC4-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; VF4IC4-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[TMP0]], i64 4
@@ -496,10 +491,9 @@ define i64 @diff_exit_block_post_inc_use1() {
 ; VF4IC4-NEXT:    [[TMP16:%.*]] = or <4 x i1> [[TMP15]], [[TMP36]]
 ; VF4IC4-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP16]])
 ; VF4IC4-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT]], 64
-; VF4IC4-NEXT:    [[TMP7:%.*]] = or i1 [[TMP5]], [[TMP6]]
-; VF4IC4-NEXT:    br i1 [[TMP7]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP7:![0-9]+]]
-; VF4IC4:       middle.split:
-; VF4IC4-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; VF4IC4-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP7:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[LOOP_END:%.*]]
 ; VF4IC4:       vector.early.exit:
@@ -566,7 +560,7 @@ define i64 @same_exit_block_pre_inc_use1_reverse() {
 ; VF4IC4:       vector.ph:
 ; VF4IC4-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; VF4IC4:       vector.body:
-; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; VF4IC4-NEXT:    [[OFFSET_IDX:%.*]] = sub i64 1023, [[INDEX]]
 ; VF4IC4-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; VF4IC4-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[TMP0]], i64 0
@@ -616,10 +610,9 @@ define i64 @same_exit_block_pre_inc_use1_reverse() {
 ; VF4IC4-NEXT:    [[TMP24:%.*]] = or <4 x i1> [[TMP45]], [[TMP47]]
 ; VF4IC4-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP24]])
 ; VF4IC4-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT]], 1008
-; VF4IC4-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; VF4IC4-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]]
-; VF4IC4:       middle.split:
-; VF4IC4-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; VF4IC4-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[SCALAR_PH:%.*]]
 ; VF4IC4:       vector.early.exit:
@@ -696,7 +689,7 @@ define i8 @same_exit_block_use_loaded_value() {
 ; VF4IC4:       vector.ph:
 ; VF4IC4-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; VF4IC4:       vector.body:
-; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; VF4IC4-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[INDEX]]
 ; VF4IC4-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[TMP0]], i64 4
 ; VF4IC4-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i8, ptr [[TMP0]], i64 8
@@ -727,10 +720,9 @@ define i8 @same_exit_block_use_loaded_value() {
 ; VF4IC4-NEXT:    [[TMP16:%.*]] = or <4 x i1> [[TMP19]], [[TMP30]]
 ; VF4IC4-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP16]])
 ; VF4IC4-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT]], 1024
-; VF4IC4-NEXT:    [[TMP7:%.*]] = or i1 [[TMP5]], [[TMP6]]
-; VF4IC4-NEXT:    br i1 [[TMP7]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP10:![0-9]+]]
-; VF4IC4:       middle.split:
-; VF4IC4-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; VF4IC4-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP10:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[LOOP_END:%.*]]
 ; VF4IC4:       vector.early.exit:
@@ -763,7 +755,7 @@ define i8 @same_exit_block_use_loaded_value() {
 ; VF4IC4-NEXT:    [[TMP42:%.*]] = select i1 [[TMP41]], i8 [[TMP40]], i8 [[TMP38]]
 ; VF4IC4-NEXT:    br label [[LOOP_END]]
 ; VF4IC4:       loop.end:
-; VF4IC4-NEXT:    [[RETVAL:%.*]] = phi i8 [ [[TMP42]], [[VECTOR_EARLY_EXIT]] ], [ -1, [[MIDDLE_BLOCK]] ]
+; VF4IC4-NEXT:    [[RETVAL:%.*]] = phi i8 [ [[TMP42]], [[VECTOR_EARLY_EXIT]] ], [ -1, [[MIDDLE_BLOCK1]] ]
 ; VF4IC4-NEXT:    ret i8 [[RETVAL]]
 ;
 entry:
@@ -804,7 +796,7 @@ define i8 @same_exit_block_reverse_use_loaded_value() {
 ; VF4IC4:       vector.ph:
 ; VF4IC4-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; VF4IC4:       vector.body:
-; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; VF4IC4-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; VF4IC4-NEXT:    [[OFFSET_IDX:%.*]] = sub i64 1023, [[INDEX]]
 ; VF4IC4-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; VF4IC4-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[TMP0]], i64 0
@@ -854,10 +846,9 @@ define i8 @same_exit_block_reverse_use_loaded_value() {
 ; VF4IC4-NEXT:    [[TMP24:%.*]] = or <4 x i1> [[TMP52]], [[TMP53]]
 ; VF4IC4-NEXT:    [[TMP25:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP24]])
 ; VF4IC4-NEXT:    [[TMP26:%.*]] = icmp eq i64 [[INDEX_NEXT]], 1008
-; VF4IC4-NEXT:    [[TMP27:%.*]] = or i1 [[TMP25]], [[TMP26]]
-; VF4IC4-NEXT:    br i1 [[TMP27]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP11:![0-9]+]]
-; VF4IC4:       middle.split:
-; VF4IC4-NEXT:    br i1 [[TMP25]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; VF4IC4-NEXT:    br i1 [[TMP25]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4-NEXT:    br i1 [[TMP26]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP11:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[SCALAR_PH:%.*]]
 ; VF4IC4:       vector.early.exit:
diff --git a/llvm/test/Transforms/LoopVectorize/single_early_exit.ll b/llvm/test/Transforms/LoopVectorize/single_early_exit.ll
index 71e2b82e2fdd1..601cdd0bd0e38 100644
--- a/llvm/test/Transforms/LoopVectorize/single_early_exit.ll
+++ b/llvm/test/Transforms/LoopVectorize/single_early_exit.ll
@@ -15,7 +15,7 @@ define i64 @same_exit_block_phi_of_consts() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP1]], align 1
@@ -26,16 +26,15 @@ define i64 @same_exit_block_phi_of_consts() {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ 0, [[VECTOR_EARLY_EXIT]] ], [ 1, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ 0, [[VECTOR_EARLY_EXIT]] ], [ 1, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -76,7 +75,7 @@ define i64 @diff_exit_block_phi_of_consts() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP1]], align 1
@@ -87,10 +86,9 @@ define i64 @diff_exit_block_phi_of_consts() {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -159,7 +157,7 @@ define i32 @diff_exit_block_needs_scev_check(i32 %end) {
 ; CHECK-NEXT:    [[TMP8:%.*]] = trunc i64 [[N_VEC]] to i8
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[TMP10:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 [[INDEX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i32>, ptr [[TMP10]], align 4
 ; CHECK-NEXT:    [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[P2]], i64 [[INDEX]]
@@ -169,18 +167,17 @@ define i32 @diff_exit_block_needs_scev_check(i32 %end) {
 ; CHECK-NEXT:    [[TMP13:%.*]] = freeze <4 x i1> [[TMP14]]
 ; CHECK-NEXT:    [[TMP15:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP13]])
 ; CHECK-NEXT:    [[TMP16:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
-; CHECK-NEXT:    [[TMP17:%.*]] = or i1 [[TMP15]], [[TMP16]]
-; CHECK-NEXT:    br i1 [[TMP17]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP15]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP15]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP16]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[UMAX1]], [[N_VEC]]
 ; CHECK-NEXT:    br i1 [[CMP_N]], label [[EXIT:%.*]], label [[SCALAR_PH]]
 ; CHECK:       vector.early.exit:
 ; CHECK-NEXT:    br label [[FOUND:%.*]]
 ; CHECK:       scalar.ph:
-; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i8 [ [[TMP8]], [[MIDDLE_BLOCK]] ], [ 0, [[ENTRY:%.*]] ], [ 0, [[VECTOR_SCEVCHECK]] ]
-; CHECK-NEXT:    [[BC_RESUME_VAL3:%.*]] = phi i64 [ [[N_VEC]], [[MIDDLE_BLOCK]] ], [ 0, [[ENTRY]] ], [ 0, [[VECTOR_SCEVCHECK]] ]
+; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i8 [ [[TMP8]], [[MIDDLE_BLOCK1]] ], [ 0, [[ENTRY:%.*]] ], [ 0, [[VECTOR_SCEVCHECK]] ]
+; CHECK-NEXT:    [[BC_RESUME_VAL3:%.*]] = phi i64 [ [[N_VEC]], [[MIDDLE_BLOCK1]] ], [ 0, [[ENTRY]] ], [ 0, [[VECTOR_SCEVCHECK]] ]
 ; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
 ; CHECK:       for.body:
 ; CHECK-NEXT:    [[IND:%.*]] = phi i8 [ [[IND_NEXT:%.*]], [[FOR_INC:%.*]] ], [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ]
@@ -254,13 +251,12 @@ define i32 @diff_blocks_invariant_early_exit_cond(ptr %s) {
 ; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[INDEX_NEXT]], 276
-; CHECK-NEXT:    [[TMP3:%.*]] = or i1 [[TMP1]], [[TMP2]]
-; CHECK-NEXT:    br i1 [[TMP3]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP1]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP1]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP2]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[FOR_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -311,7 +307,7 @@ define void @inner_loop_trip_count_depends_on_outer_iv(ptr align 8 dereferenceab
 ; CHECK-NEXT:    [[N_VEC:%.*]] = sub i64 [[OUTER_IV]], [[N_MOD_VF]]
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr ptr, ptr [[GEP_SRC]], i64 [[INDEX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x ptr>, ptr [[TMP0]], align 8
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq <4 x ptr> [[WIDE_LOAD]], zeroinitializer
@@ -319,17 +315,16 @@ define void @inner_loop_trip_count_depends_on_outer_iv(ptr align 8 dereferenceab
 ; CHECK-NEXT:    [[TMP2:%.*]] = freeze <4 x i1> [[TMP1]]
 ; CHECK-NEXT:    [[TMP3:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP2]])
 ; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
-; CHECK-NEXT:    [[TMP5:%.*]] = or i1 [[TMP3]], [[TMP4]]
-; CHECK-NEXT:    br i1 [[TMP5]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP7:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP3]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP3]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP4]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP7:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[OUTER_IV]], [[N_VEC]]
 ; CHECK-NEXT:    br i1 [[CMP_N]], label [[OUTER_LATCH_LOOPEXIT:%.*]], label [[SCALAR_PH]]
 ; CHECK:       vector.early.exit:
 ; CHECK-NEXT:    br label [[THEN_LOOPEXIT:%.*]]
 ; CHECK:       scalar.ph:
-; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i64 [ [[N_VEC]], [[MIDDLE_BLOCK]] ], [ 0, [[INNER_HEADER_PREHEADER]] ]
+; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i64 [ [[N_VEC]], [[MIDDLE_BLOCK1]] ], [ 0, [[INNER_HEADER_PREHEADER]] ]
 ; CHECK-NEXT:    br label [[INNER_HEADER:%.*]]
 ; CHECK:       inner.header:
 ; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[INNER_LATCH:%.*]] ], [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ]
@@ -408,7 +403,7 @@ define i64 @loop_guard_needed_to_prove_dereferenceable(i32 %x, i1 %cmp2) {
 ; CHECK-NEXT:    [[N_VEC:%.*]] = sub i64 [[TMP0]], [[N_MOD_VF]]
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr [32 x i32], ptr [[A]], i64 0, i64 [[INDEX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i32>, ptr [[TMP1]], align 4
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <4 x i32> [[WIDE_LOAD]], zeroinitializer
@@ -416,19 +411,17 @@ define i64 @loop_guard_needed_to_prove_dereferenceable(i32 %x, i1 %cmp2) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = freeze <4 x i1> [[TMP2]]
 ; CHECK-NEXT:    [[TMP4:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
-; CHECK-NEXT:    [[TMP6:%.*]] = or i1 [[TMP4]], [[TMP5]]
-; CHECK-NEXT:    br i1 [[TMP6]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP4]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP4]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP5]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[TMP0]], [[N_VEC]]
+; CHECK-NEXT:    [[IND_ESCAPE:%.*]] = sub i64 [[N_VEC]], 1
 ; CHECK-NEXT:    br i1 [[CMP_N]], label [[EXIT_LOOPEXIT:%.*]], label [[SCALAR_PH]]
 ; CHECK:       vector.early.exit:
-; CHECK-NEXT:    [[TMP7:%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v4i1(<4 x i1> [[TMP2]], i1 false)
-; CHECK-NEXT:    [[TMP8:%.*]] = add i64 [[INDEX]], [[TMP7]]
 ; CHECK-NEXT:    br label [[EXIT_LOOPEXIT]]
 ; CHECK:       scalar.ph:
-; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i64 [ [[N_VEC]], [[MIDDLE_BLOCK]] ], [ 0, [[PH]] ]
+; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i64 [ [[N_VEC]], [[MIDDLE_BLOCK1]] ], [ 0, [[PH]] ]
 ; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]
 ; CHECK:       loop.header:
 ; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]
@@ -441,7 +434,7 @@ define i64 @loop_guard_needed_to_prove_dereferenceable(i32 %x, i1 %cmp2) {
 ; CHECK-NEXT:    [[EC:%.*]] = icmp eq i64 [[IV]], [[N_EXT]]
 ; CHECK-NEXT:    br i1 [[EC]], label [[EXIT_LOOPEXIT]], label [[LOOP_HEADER]], !llvm.loop [[LOOP10:![0-9]+]]
 ; CHECK:       exit.loopexit:
-; CHECK-NEXT:    [[RES_PH:%.*]] = phi i64 [ [[IV]], [[LOOP_HEADER]] ], [ -1, [[LOOP_LATCH]] ], [ -1, [[MIDDLE_BLOCK]] ], [ [[TMP8]], [[VECTOR_EARLY_EXIT]] ]
+; CHECK-NEXT:    [[RES_PH:%.*]] = phi i64 [ [[IV]], [[LOOP_HEADER]] ], [ -1, [[LOOP_LATCH]] ], [ [[IND_ESCAPE]], [[MIDDLE_BLOCK1]] ], [ -1, [[VECTOR_EARLY_EXIT]] ]
 ; CHECK-NEXT:    br label [[EXIT]]
 ; CHECK:       exit:
 ; CHECK-NEXT:    [[RES:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[RES_PH]], [[EXIT_LOOPEXIT]] ]
@@ -556,7 +549,7 @@ define i64 @loop_guards_needed_to_prove_deref_multiple(i32 %x, i1 %c, ptr derefe
 ; CHECK-NEXT:    [[IV_NEXT:%.*]] = sub i64 [[TMP2]], [[N_MOD_VF]]
 ; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[LOOP_HEADER]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]
 ; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[INDEX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP3]], align 1
 ; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq <4 x i8> [[WIDE_LOAD]], zeroinitializer
@@ -564,19 +557,17 @@ define i64 @loop_guards_needed_to_prove_deref_multiple(i32 %x, i1 %c, ptr derefe
 ; CHECK-NEXT:    [[TMP5:%.*]] = freeze <4 x i1> [[TMP4]]
 ; CHECK-NEXT:    [[TMP6:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP5]])
 ; CHECK-NEXT:    [[TMP7:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[IV_NEXT]]
-; CHECK-NEXT:    [[TMP8:%.*]] = or i1 [[TMP6]], [[TMP7]]
-; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_SPLIT:%.*]], label [[LOOP_HEADER]], !llvm.loop [[LOOP11:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[LOOP_LATCH:%.*]]
+; CHECK-NEXT:    br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[LOOP_LATCH]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP7]], label [[MIDDLE_BLOCK:%.*]], label [[LOOP_HEADER]], !llvm.loop [[LOOP11:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[TMP2]], [[IV_NEXT]]
+; CHECK-NEXT:    [[IND_ESCAPE:%.*]] = sub i64 [[IV_NEXT]], 1
 ; CHECK-NEXT:    br i1 [[CMP_N]], label [[EXIT_LOOPEXIT:%.*]], label [[SCALAR_PH]]
 ; CHECK:       vector.early.exit:
-; CHECK-NEXT:    [[TMP9:%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v4i1(<4 x i1> [[TMP4]], i1 false)
-; CHECK-NEXT:    [[TMP10:%.*]] = add i64 [[INDEX]], [[TMP9]]
 ; CHECK-NEXT:    br label [[EXIT_LOOPEXIT]]
 ; CHECK:       scalar.ph:
-; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ [[IV_NEXT]], [[LOOP_LATCH]] ], [ 0, [[PH]] ]
+; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ [[IV_NEXT]], [[MIDDLE_BLOCK]] ], [ 0, [[PH]] ]
 ; CHECK-NEXT:    br label [[LOOP_HEADER1:%.*]]
 ; CHECK:       loop.header:
 ; CHECK-NEXT:    [[IV1:%.*]] = phi i64 [ [[IV_NEXT1:%.*]], [[LOOP_LATCH1:%.*]] ], [ [[IV]], [[SCALAR_PH]] ]
@@ -589,7 +580,7 @@ define i64 @loop_guards_needed_to_prove_deref_multiple(i32 %x, i1 %c, ptr derefe
 ; CHECK-NEXT:    [[EC:%.*]] = icmp eq i64 [[IV1]], [[N_EXT]]
 ; CHECK-NEXT:    br i1 [[EC]], label [[EXIT_LOOPEXIT]], label [[LOOP_HEADER1]], !llvm.loop [[LOOP12:![0-9]+]]
 ; CHECK:       exit.loopexit:
-; CHECK-NEXT:    [[RES_PH:%.*]] = phi i64 [ [[IV1]], [[LOOP_HEADER1]] ], [ 0, [[LOOP_LATCH1]] ], [ 0, [[LOOP_LATCH]] ], [ [[TMP10]], [[VECTOR_EARLY_EXIT]] ]
+; CHECK-NEXT:    [[RES_PH:%.*]] = phi i64 [ [[IV1]], [[LOOP_HEADER1]] ], [ 0, [[LOOP_LATCH1]] ], [ [[IND_ESCAPE]], [[MIDDLE_BLOCK]] ], [ 0, [[VECTOR_EARLY_EXIT]] ]
 ; CHECK-NEXT:    br label [[EXIT]]
 ; CHECK:       exit:
 ; CHECK-NEXT:    [[RES:%.*]] = phi i64 [ -1, [[ENTRY:%.*]] ], [ -2, [[THEN]] ], [ [[RES_PH]], [[EXIT_LOOPEXIT]] ]
diff --git a/llvm/test/Transforms/LoopVectorize/single_early_exit_live_outs.ll b/llvm/test/Transforms/LoopVectorize/single_early_exit_live_outs.ll
index 1caceb1395373..38f00ce89a126 100644
--- a/llvm/test/Transforms/LoopVectorize/single_early_exit_live_outs.ll
+++ b/llvm/test/Transforms/LoopVectorize/single_early_exit_live_outs.ll
@@ -14,7 +14,7 @@ define i64 @same_exit_block_pre_inc_use1() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP1]], align 1
@@ -25,10 +25,9 @@ define i64 @same_exit_block_pre_inc_use1() {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -37,7 +36,7 @@ define i64 @same_exit_block_pre_inc_use1() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP10]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -78,7 +77,7 @@ define i32 @same_exit_block_pre_inc_use1_iv64_endi32_step2() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP1]], align 1
@@ -89,10 +88,9 @@ define i32 @same_exit_block_pre_inc_use1_iv64_endi32_step2() {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -103,7 +101,7 @@ define i32 @same_exit_block_pre_inc_use1_iv64_endi32_step2() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i32 9, [[TMP11]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i32 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i32 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i32 [[RETVAL]]
 ;
 entry:
@@ -144,7 +142,7 @@ define i32 @same_exit_block_pre_inc_use1_iv128_endi32_step2() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i128 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i128 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = trunc i128 [[INDEX1]] to i64
 ; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[NEXT_GEP]], align 1
@@ -153,10 +151,9 @@ define i32 @same_exit_block_pre_inc_use1_iv128_endi32_step2() {
 ; CHECK-NEXT:    [[TMP1:%.*]] = freeze <4 x i1> [[TMP4]]
 ; CHECK-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP1]])
 ; CHECK-NEXT:    [[TMP6:%.*]] = icmp eq i128 [[INDEX_NEXT2]], 64
-; CHECK-NEXT:    [[TMP7:%.*]] = or i1 [[TMP5]], [[TMP6]]
-; CHECK-NEXT:    br i1 [[TMP7]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -168,7 +165,7 @@ define i32 @same_exit_block_pre_inc_use1_iv128_endi32_step2() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i32 9, [[TMP10]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i32 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i32 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i32 [[RETVAL]]
 ;
 entry:
@@ -208,7 +205,7 @@ define float @same_exit_block_pre_inc_use1_iv64_endf32() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP1]], align 1
@@ -219,10 +216,9 @@ define float @same_exit_block_pre_inc_use1_iv64_endf32() {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -233,7 +229,7 @@ define float @same_exit_block_pre_inc_use1_iv64_endf32() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = fadd fast float 9.000000e+00, [[TMP11]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi float [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 1.230000e+02, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi float [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 1.230000e+02, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret float [[RETVAL]]
 ;
 entry:
@@ -276,7 +272,7 @@ define ptr @same_exit_block_pre_inc_use1_iv64_endptr() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT7:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT7:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP10:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP10]], align 1
@@ -287,10 +283,9 @@ define ptr @same_exit_block_pre_inc_use1_iv64_endptr() {
 ; CHECK-NEXT:    [[TMP3:%.*]] = freeze <4 x i1> [[TMP15]]
 ; CHECK-NEXT:    [[TMP16:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP17:%.*]] = icmp eq i64 [[INDEX_NEXT7]], 64
-; CHECK-NEXT:    [[TMP18:%.*]] = or i1 [[TMP16]], [[TMP17]]
-; CHECK-NEXT:    br i1 [[TMP18]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP16]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP16]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP17]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -300,7 +295,7 @@ define ptr @same_exit_block_pre_inc_use1_iv64_endptr() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = getelementptr i8, ptr [[P2]], i64 [[TMP20]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi ptr [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ [[P1]], [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi ptr [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ [[P1]], [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret ptr [[RETVAL]]
 ;
 entry:
@@ -342,7 +337,7 @@ define ptr @same_exit_block_pre_inc_use1_ivptr() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[P1]], i64 [[INDEX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[NEXT_GEP]], align 1
 ; CHECK-NEXT:    [[TMP11:%.*]] = icmp ne <4 x i8> [[WIDE_LOAD]], splat (i8 72)
@@ -350,10 +345,9 @@ define ptr @same_exit_block_pre_inc_use1_ivptr() {
 ; CHECK-NEXT:    [[TMP1:%.*]] = freeze <4 x i1> [[TMP11]]
 ; CHECK-NEXT:    [[TMP12:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP1]])
 ; CHECK-NEXT:    [[TMP13:%.*]] = icmp eq i64 [[INDEX_NEXT]], 1024
-; CHECK-NEXT:    [[TMP14:%.*]] = or i1 [[TMP12]], [[TMP13]]
-; CHECK-NEXT:    br i1 [[TMP14]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP7:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP12]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP12]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP13]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP7:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -362,7 +356,7 @@ define ptr @same_exit_block_pre_inc_use1_ivptr() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = getelementptr i8, ptr [[P1]], i64 [[TMP8]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi ptr [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ [[PTREND]], [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi ptr [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ [[PTREND]], [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret ptr [[RETVAL]]
 ;
 entry:
@@ -400,7 +394,7 @@ define i64 @same_exit_block_pre_inc1_use_inv_cond(i1 %cond) {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP1]], align 1
@@ -413,10 +407,9 @@ define i64 @same_exit_block_pre_inc1_use_inv_cond(i1 %cond) {
 ; CHECK-NEXT:    [[TMP12:%.*]] = freeze <4 x i1> [[TMP7]]
 ; CHECK-NEXT:    [[TMP8:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP12]])
 ; CHECK-NEXT:    [[TMP9:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP10:%.*]] = or i1 [[TMP8]], [[TMP9]]
-; CHECK-NEXT:    br i1 [[TMP10]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP8]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP8]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -425,7 +418,7 @@ define i64 @same_exit_block_pre_inc1_use_inv_cond(i1 %cond) {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP11]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -467,7 +460,7 @@ define i64 @same_exit_block_pre_inc_use1_gep_two_indices() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [1024 x i8], ptr [[P1]], i64 0, i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP1]], align 1
@@ -478,10 +471,9 @@ define i64 @same_exit_block_pre_inc_use1_gep_two_indices() {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -490,7 +482,7 @@ define i64 @same_exit_block_pre_inc_use1_gep_two_indices() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP10]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -531,7 +523,7 @@ define i64 @same_exit_block_pre_inc_use1_alloca_diff_type() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP1]], align 1
@@ -542,10 +534,9 @@ define i64 @same_exit_block_pre_inc_use1_alloca_diff_type() {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP10:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP10:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -554,7 +545,7 @@ define i64 @same_exit_block_pre_inc_use1_alloca_diff_type() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP10]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -595,7 +586,7 @@ define i64 @same_exit_block_pre_inc_use2() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP1]], align 1
@@ -606,16 +597,15 @@ define i64 @same_exit_block_pre_inc_use2() {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP11:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP11:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ 67, [[VECTOR_EARLY_EXIT]] ], [ 66, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ 67, [[VECTOR_EARLY_EXIT]] ], [ 66, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -656,7 +646,7 @@ define i64 @same_exit_block_pre_inc_use3() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP1]], align 1
@@ -667,10 +657,9 @@ define i64 @same_exit_block_pre_inc_use3() {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP12:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP12:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -679,7 +668,7 @@ define i64 @same_exit_block_pre_inc_use3() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP10]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[INDEX_LCSSA:%.*]] = phi i64 [ 66, [[MIDDLE_BLOCK]] ], [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ]
+; CHECK-NEXT:    [[INDEX_LCSSA:%.*]] = phi i64 [ 66, [[MIDDLE_BLOCK1]] ], [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ]
 ; CHECK-NEXT:    ret i64 [[INDEX_LCSSA]]
 ;
 entry:
@@ -721,8 +710,8 @@ define i64 @same_exit_block_pre_inc_use4() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[VECTOR_BODY]] ]
-; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <4 x i64> [ <i64 3, i64 4, i64 5, i64 6>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[MIDDLE_BLOCK:%.*]] ]
+; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <4 x i64> [ <i64 3, i64 4, i64 5, i64 6>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[MIDDLE_BLOCK]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i64, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i64>, ptr [[TMP1]], align 1
@@ -731,11 +720,10 @@ define i64 @same_exit_block_pre_inc_use4() {
 ; CHECK-NEXT:    [[TMP2:%.*]] = freeze <4 x i1> [[TMP4]]
 ; CHECK-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP2]])
 ; CHECK-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT2]], 64
-; CHECK-NEXT:    [[TMP7:%.*]] = or i1 [[TMP5]], [[TMP6]]
 ; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <4 x i64> [[VEC_IND]], splat (i64 4)
-; CHECK-NEXT:    br i1 [[TMP7]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP13:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP13:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -744,7 +732,7 @@ define i64 @same_exit_block_pre_inc_use4() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP8]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -783,7 +771,7 @@ define i64 @same_exit_block_post_inc_use() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP4]], align 1
@@ -794,10 +782,9 @@ define i64 @same_exit_block_post_inc_use() {
 ; CHECK-NEXT:    [[TMP3:%.*]] = freeze <4 x i1> [[TMP13]]
 ; CHECK-NEXT:    [[TMP14:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP15:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP16:%.*]] = or i1 [[TMP14]], [[TMP15]]
-; CHECK-NEXT:    br i1 [[TMP16]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP14:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP14]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP14]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP15]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP14:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -806,7 +793,7 @@ define i64 @same_exit_block_post_inc_use() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP10]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -846,7 +833,7 @@ define ptr @same_exit_block_post_inc_use1_ivptr() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[P1]], i64 [[INDEX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[NEXT_GEP]], align 1
 ; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne <4 x i8> [[WIDE_LOAD]], splat (i8 72)
@@ -854,10 +841,9 @@ define ptr @same_exit_block_post_inc_use1_ivptr() {
 ; CHECK-NEXT:    [[TMP1:%.*]] = freeze <4 x i1> [[TMP15]]
 ; CHECK-NEXT:    [[TMP16:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP1]])
 ; CHECK-NEXT:    [[TMP17:%.*]] = icmp eq i64 [[INDEX_NEXT]], 1024
-; CHECK-NEXT:    [[TMP18:%.*]] = or i1 [[TMP16]], [[TMP17]]
-; CHECK-NEXT:    br i1 [[TMP18]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP15:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP16]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP16]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP17]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP15:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -867,7 +853,7 @@ define ptr @same_exit_block_post_inc_use1_ivptr() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = getelementptr i8, ptr [[P1]], i64 [[TMP9]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi ptr [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ [[PTREND]], [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi ptr [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ [[PTREND]], [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret ptr [[RETVAL]]
 ;
 entry:
@@ -904,7 +890,7 @@ define i64 @same_exit_block_post_inc_use2() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP4]], align 1
@@ -915,10 +901,9 @@ define i64 @same_exit_block_post_inc_use2() {
 ; CHECK-NEXT:    [[TMP3:%.*]] = freeze <4 x i1> [[TMP17]]
 ; CHECK-NEXT:    [[TMP18:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP19:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP20:%.*]] = or i1 [[TMP18]], [[TMP19]]
-; CHECK-NEXT:    br i1 [[TMP20]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP16:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP18]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP18]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP19]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP16:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -928,7 +913,7 @@ define i64 @same_exit_block_post_inc_use2() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP11]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 66, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 66, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -969,7 +954,7 @@ define i64 @diff_exit_block_pre_inc_use1() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP1]], align 1
@@ -980,10 +965,9 @@ define i64 @diff_exit_block_pre_inc_use1() {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP17:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP17:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -1038,7 +1022,7 @@ define i64 @diff_exit_block_pre_inc_use2() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP1]], align 1
@@ -1049,10 +1033,9 @@ define i64 @diff_exit_block_pre_inc_use2() {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP18:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP18:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -1104,7 +1087,7 @@ define i64 @diff_exit_block_pre_inc_use3() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX2:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT4:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX2:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT4:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX2]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP1]], align 1
@@ -1115,10 +1098,9 @@ define i64 @diff_exit_block_pre_inc_use3() {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT4]], 64
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP19:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP19:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -1171,7 +1153,7 @@ define i64 @diff_exit_block_post_inc_use1() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP4]], align 1
@@ -1182,10 +1164,9 @@ define i64 @diff_exit_block_post_inc_use1() {
 ; CHECK-NEXT:    [[TMP3:%.*]] = freeze <4 x i1> [[TMP13]]
 ; CHECK-NEXT:    [[TMP14:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP15:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP16:%.*]] = or i1 [[TMP14]], [[TMP15]]
-; CHECK-NEXT:    br i1 [[TMP16]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP20:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP14]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP14]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP15]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP20:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -1240,7 +1221,7 @@ define i64 @diff_exit_block_post_inc_use2() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP12:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP12]], align 1
@@ -1251,10 +1232,9 @@ define i64 @diff_exit_block_post_inc_use2() {
 ; CHECK-NEXT:    [[TMP3:%.*]] = freeze <4 x i1> [[TMP17]]
 ; CHECK-NEXT:    [[TMP18:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP19:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP20:%.*]] = or i1 [[TMP18]], [[TMP19]]
-; CHECK-NEXT:    br i1 [[TMP20]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP21:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP18]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP18]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP19]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP21:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -1311,7 +1291,7 @@ define i64 @diff_exit_block_post_inc_use3(i64 %start) {
 ; CHECK-NEXT:    [[TMP0:%.*]] = add i64 [[START]], 64
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT4:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT4:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP14:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP14]], align 1
@@ -1322,10 +1302,9 @@ define i64 @diff_exit_block_post_inc_use3(i64 %start) {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP19]]
 ; CHECK-NEXT:    [[TMP20:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP21:%.*]] = icmp eq i64 [[INDEX_NEXT4]], 64
-; CHECK-NEXT:    [[TMP22:%.*]] = or i1 [[TMP20]], [[TMP21]]
-; CHECK-NEXT:    br i1 [[TMP22]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP22:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP20]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP20]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP21]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP22:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[IND_ESCAPE:%.*]] = sub i64 [[TMP0]], 1
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -1384,7 +1363,7 @@ define i64 @loop_contains_safe_call() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds float, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x float>, ptr [[TMP1]], align 1
@@ -1394,10 +1373,9 @@ define i64 @loop_contains_safe_call() {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP5]]
 ; CHECK-NEXT:    [[TMP6:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP7:%.*]] = icmp eq i64 [[INDEX_NEXT2]], 64
-; CHECK-NEXT:    [[TMP8:%.*]] = or i1 [[TMP6]], [[TMP7]]
-; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP23:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP7]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP23:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -1406,7 +1384,7 @@ define i64 @loop_contains_safe_call() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP9]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -1446,7 +1424,7 @@ define i64 @loop_contains_safe_div() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i32>, ptr [[TMP1]], align 1
@@ -1456,10 +1434,9 @@ define i64 @loop_contains_safe_div() {
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP5]]
 ; CHECK-NEXT:    [[TMP6:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP7:%.*]] = icmp eq i64 [[INDEX_NEXT2]], 64
-; CHECK-NEXT:    [[TMP8:%.*]] = or i1 [[TMP6]], [[TMP7]]
-; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP24:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP7]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP24:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -1468,7 +1445,7 @@ define i64 @loop_contains_safe_div() {
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP9]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -1507,7 +1484,7 @@ define i64 @loop_contains_load_after_early_exit(ptr dereferenceable(1024) align(
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i32>, ptr [[TMP1]], align 1
@@ -1518,12 +1495,11 @@ define i64 @loop_contains_load_after_early_exit(ptr dereferenceable(1024) align(
 ; CHECK-NEXT:    [[TMP3:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP25:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <4 x i64> [[WIDE_LOAD2]], i32 3
-; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP25:![0-9]+]]
 ; CHECK:       middle.block:
+; CHECK-NEXT:    [[TMP9:%.*]] = extractelement <4 x i64> [[WIDE_LOAD2]], i32 3
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
 ; CHECK-NEXT:    [[FIRST_ACTIVE_LANE:%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v4i1(<4 x i1> [[TMP6]], i1 false)
@@ -1531,7 +1507,7 @@ define i64 @loop_contains_load_after_early_exit(ptr dereferenceable(1024) align(
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP11]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ [[TMP10]], [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ [[TMP9]], [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
@@ -1570,7 +1546,7 @@ define i64 @same_exit_block_pre_inc_use1_reverse() {
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT4:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT4:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = sub i64 1023, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 0
@@ -1587,10 +1563,9 @@ define i64 @same_exit_block_pre_inc_use1_reverse() {
 ; CHECK-NEXT:    [[TMP7:%.*]] = freeze <4 x i1> [[TMP8]]
 ; CHECK-NEXT:    [[TMP9:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP7]])
 ; CHECK-NEXT:    [[TMP10:%.*]] = icmp eq i64 [[INDEX_NEXT4]], 1020
-; CHECK-NEXT:    [[TMP11:%.*]] = or i1 [[TMP9]], [[TMP10]]
-; CHECK-NEXT:    br i1 [[TMP11]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP26:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP9]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP9]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP10]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP26:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[SCALAR_PH:%.*]]
 ; CHECK:       vector.early.exit:
@@ -1701,7 +1676,7 @@ define i64 @same_exit_block_pre_inc_use1_deref_ptrs(ptr dereferenceable(1024) %p
 ; CHECK:       vector.ph:
 ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
 ; CHECK:       vector.body:
-; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[MIDDLE_BLOCK:%.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP1]], align 1
@@ -1712,10 +1687,9 @@ define i64 @same_exit_block_pre_inc_use1_deref_ptrs(ptr dereferenceable(1024) %p
 ; CHECK-NEXT:    [[TMP4:%.*]] = freeze <4 x i1> [[TMP6]]
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
-; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
-; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP28:![0-9]+]]
-; CHECK:       middle.split:
-; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
+; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
+; CHECK:       vector.body.multi.cond.1:
+; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP28:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
 ; CHECK:       vector.early.exit:
@@ -1724,7 +1698,7 @@ define i64 @same_exit_block_pre_inc_use1_deref_ptrs(ptr dereferenceable(1024) %p
 ; CHECK-NEXT:    [[EARLY_EXIT_VALUE:%.*]] = add i64 3, [[TMP10]]
 ; CHECK-NEXT:    br label [[LOOP_END]]
 ; CHECK:       loop.end:
-; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK]] ]
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i64 [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ], [ 67, [[MIDDLE_BLOCK1]] ]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
 entry:
diff --git a/llvm/test/Transforms/LoopVectorize/single_early_exit_with_outer_loop.ll b/llvm/test/Transforms/LoopVectorize/single_early_exit_with_outer_loop.ll
index 89eef094e0c8a..babc483f41386 100644
--- a/llvm/test/Transforms/LoopVectorize/single_early_exit_with_outer_loop.ll
+++ b/llvm/test/Transforms/LoopVectorize/single_early_exit_with_outer_loop.ll
@@ -2,11 +2,11 @@
 
 declare void @init_mem(ptr, i64);
 
-; Tests that the additional middle.split created for handling loops with
-; uncountable early exits is correctly adding to the outer loop at depth 1.
+; Tests that the additional blocks created for handling loops with
+; uncountable early exits are correctly added to the outer loop at depth 1.
 define void @early_exit_in_outer_loop1() {
 ; CHECK-LABEL: Loop info for function 'early_exit_in_outer_loop1':
-; CHECK: Loop at depth 1 containing: %loop.outer<header>,%loop.inner.found,%loop.inner.end<latch>,%loop.inner.end.loopexit,%vector.ph,%vector.body,%middle.split,%middle.block,%vector.early.exit
+; CHECK: Loop at depth 1 containing: %loop.outer<header>,%loop.inner.found,%loop.inner.end<latch>,%loop.inner.end.loopexit,%vector.ph,%vector.body,%vector.body.multi.cond.1,%middle.block,%vector.early.exit
 entry:
   %p1 = alloca [1024 x i8]
   %p2 = alloca [1024 x i8]
@@ -40,13 +40,13 @@ loop.inner.end:
   br label %loop.outer
 }
 
-; Tests that the additional middle.split created for handling loops with
-; uncountable early exits is correctly adding to both the outer and middle
+; Tests that the additional blocks created for handling loops with
+; uncountable early exits are correctly added to both the outer and middle
 ; loops at depths 1 and 2, respectively.
 define void @early_exit_in_outer_loop2() {
 ; CHECK-LABEL: Loop info for function 'early_exit_in_outer_loop2':
-; CHECK: Loop at depth 1 containing: %loop.outer<header>,%loop.middle,%loop.inner.found,%loop.inner.end,%loop.middle.end,%loop.outer.latch<latch>,%vector.ph,%vector.body,%middle.split,%middle.block,%vector.early.exit
-; CHECK:    Loop at depth 2 containing: %loop.middle<header>,%loop.inner.end<latch><exiting>,%vector.ph,%vector.body,%middle.split<exiting>,%middle.block
+; CHECK: Loop at depth 1 containing: %loop.outer<header>,%loop.middle,%loop.inner.found,%loop.inner.end,%loop.middle.end,%loop.outer.latch<latch>,%vector.ph,%vector.body,%vector.body.multi.cond.1,%middle.block,%vector.early.exit
+; CHECK:    Loop at depth 2 containing: %loop.middle<header>,%loop.inner.end<latch><exiting>,%vector.ph,%vector.body<exiting>,%vector.body.multi.cond.1,%middle.block
 entry:
   %p1 = alloca [1024 x i8]
   %p2 = alloca [1024 x i8]
@@ -92,8 +92,8 @@ loop.outer.latch:
 
 define i32 @early_exit_branch_to_outer_header() {
 ; CHECK-LABEL: Loop info for function 'early_exit_branch_to_outer_header':
-; CHECK-NEXT:  Loop at depth 1 containing: %outer.header<header>,%outer.header.loopexit<latch>,%vector.ph,%vector.body,%middle.split<exiting>,%vector.early.exit
-; CHECK-NEXT:    Loop at depth 2 containing: %vector.body<header><latch><exiting>
+; CHECK-NEXT:  Loop at depth 1 containing: %outer.header<header>,%outer.header.loopexit<latch>,%vector.ph,%vector.body,%vector.body.multi.cond.1<exiting>,%vector.early.exit
+; CHECK-NEXT:    Loop at depth 2 containing: %vector.body<header><exiting>,%vector.body.multi.cond.1<latch><exiting>
 entry:
   %src = alloca [1024 x i8]
   call void @init_mem(ptr %src, i64 1024)
diff --git a/llvm/test/Transforms/LoopVectorize/uncountable-early-exit-vplan.ll b/llvm/test/Transforms/LoopVectorize/uncountable-early-exit-vplan.ll
index 00c46f4896431..3ded8b6ee6c40 100644
--- a/llvm/test/Transforms/LoopVectorize/uncountable-early-exit-vplan.ll
+++ b/llvm/test/Transforms/LoopVectorize/uncountable-early-exit-vplan.ll
@@ -1,4 +1,3 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
 ; RUN: opt -p loop-vectorize -force-vector-width=4 -force-vector-interleave=1 -S -debug %s 2>&1 | FileCheck %s
 
 ; REQUIRES: asserts
@@ -24,7 +23,7 @@ define i64 @multi_exiting_to_different_exits_live_in_exit_values() {
 ; CHECK-NEXT: <x1> vector loop: {
 ; CHECK-NEXT:   vector.body:
 ; CHECK-NEXT:     EMIT vp<[[CAN_IV:%.+]]> = CANONICAL-INDUCTION ir<0>, vp<%index.next>
-; CHECK-NEXT:     vp<[[STEPS:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1>, vp<[[VF]]
+; CHECK-NEXT:     vp<[[STEPS:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1>, vp<[[VF]]>
 ; CHECK-NEXT:     CLONE ir<%gep.src> = getelementptr inbounds ir<%src>, vp<[[STEPS]]>
 ; CHECK-NEXT:     vp<[[VEC_PTR:%.+]]> = vector-pointer inbounds ir<%gep.src>
 ; CHECK-NEXT:     WIDEN ir<%l> = load vp<[[VEC_PTR]]>
@@ -32,14 +31,9 @@ define i64 @multi_exiting_to_different_exits_live_in_exit_values() {
 ; CHECK-NEXT:     EMIT vp<%index.next> = add nuw vp<[[CAN_IV]]>, vp<[[VFxUF]]>
 ; CHECK-NEXT:     EMIT vp<[[EA_TAKEN:%.+]]> = any-of ir<%c.1>
 ; CHECK-NEXT:     EMIT vp<[[LATCH_CMP:%.+]]> = icmp eq vp<%index.next>, vp<[[VTC]]>
-; CHECK-NEXT:     EMIT vp<[[EC:%.+]]> = or vp<[[EA_TAKEN]]>, vp<[[LATCH_CMP]]>
-; CHECK-NEXT:     EMIT branch-on-cond vp<[[EC]]>
+; CHECK-NEXT:     EMIT branch-on-multi-cond vp<[[EA_TAKEN]]>, vp<[[LATCH_CMP]]>
 ; CHECK-NEXT:   No successors
 ; CHECK-NEXT: }
-; CHECK-NEXT: Successor(s): middle.split
-; CHECK-EMPTY:
-; CHECK-NEXT: middle.split:
-; CHECK-NEXT:   EMIT branch-on-cond vp<[[EA_TAKEN]]>
 ; CHECK-NEXT: Successor(s): vector.early.exit, middle.block
 ; CHECK-EMPTY:
 ; CHECK-NEXT: middle.block:
@@ -60,7 +54,7 @@ define i64 @multi_exiting_to_different_exits_live_in_exit_values() {
 ; CHECK-EMPTY:
 ; CHECK-NEXT: scalar.ph:
 ; CHECK-NEXT:   EMIT-SCALAR vp<[[RESUME:%.+]]> = phi [ vp<[[VTC]]>, middle.block ], [ ir<0>, ir-bb<entry> ]
-; CHECK-NEXT: ir-bb<loop.header>
+; CHECK-NEXT: Successor(s): ir-bb<loop.header>
 ; CHECK-EMPTY:
 ; CHECK-NEXT: ir-bb<loop.header>:
 ; CHECK-NEXT:   IR   %iv = phi i64 [ %inc, %loop.latch ], [ 0, %entry ] (extra operand: vp<[[RESUME]]> from scalar.ph)
@@ -119,14 +113,9 @@ define i64 @multi_exiting_to_same_exit_live_in_exit_values() {
 ; CHECK-NEXT:     EMIT vp<%index.next> = add nuw vp<[[CAN_IV]]>, vp<[[VFxUF]]>
 ; CHECK-NEXT:     EMIT vp<[[EA_TAKEN:%.+]]> = any-of ir<%c.1>
 ; CHECK-NEXT:     EMIT vp<[[LATCH_CMP:%.+]]> = icmp eq vp<%index.next>, vp<[[VTC]]>
-; CHECK-NEXT:     EMIT vp<[[EC:%.+]]> = or vp<[[EA_TAKEN]]>, vp<[[LATCH_CMP]]>
-; CHECK-NEXT:     EMIT branch-on-cond vp<[[EC]]>
+; CHECK-NEXT:     EMIT branch-on-multi-cond vp<[[EA_TAKEN]]>, vp<[[LATCH_CMP]]>
 ; CHECK-NEXT:   No successors
 ; CHECK-NEXT: }
-; CHECK-NEXT: Successor(s): middle.split
-; CHECK-EMPTY:
-; CHECK-NEXT: middle.split:
-; CHECK-NEXT:   EMIT branch-on-cond vp<[[EA_TAKEN]]>
 ; CHECK-NEXT: Successor(s): vector.early.exit, middle.block
 ; CHECK-EMPTY:
 ; CHECK-NEXT: middle.block:
@@ -143,7 +132,7 @@ define i64 @multi_exiting_to_same_exit_live_in_exit_values() {
 ; CHECK-EMPTY:
 ; CHECK-NEXT: scalar.ph:
 ; CHECK-NEXT:   EMIT-SCALAR vp<[[RESUME:%.+]]> = phi [ vp<[[VTC]]>, middle.block ], [ ir<0>, ir-bb<entry> ]
-; CHECK-NEXT: ir-bb<loop.header>
+; CHECK-NEXT: Successor(s): ir-bb<loop.header>
 ; CHECK-EMPTY:
 ; CHECK-NEXT: ir-bb<loop.header>:
 ; CHECK-NEXT:   IR   %iv = phi i64 [ %inc, %loop.latch ], [ 0, %entry ] (extra operand: vp<[[RESUME]]> from scalar.ph)
@@ -199,14 +188,9 @@ define i64 @multi_exiting_to_same_exit_live_in_exit_values_2() {
 ; CHECK-NEXT:     EMIT vp<%index.next> = add nuw vp<[[CAN_IV]]>, vp<[[VFxUF]]>
 ; CHECK-NEXT:     EMIT vp<[[EA_TAKEN:%.+]]> = any-of ir<%c.1>
 ; CHECK-NEXT:     EMIT vp<[[LATCH_CMP:%.+]]> = icmp eq vp<%index.next>, vp<[[VTC]]>
-; CHECK-NEXT:     EMIT vp<[[EC:%.+]]> = or vp<[[EA_TAKEN]]>, vp<[[LATCH_CMP]]>
-; CHECK-NEXT:     EMIT branch-on-cond vp<[[EC]]>
+; CHECK-NEXT:     EMIT branch-on-multi-cond vp<[[EA_TAKEN]]>, vp<[[LATCH_CMP]]>
 ; CHECK-NEXT:   No successors
 ; CHECK-NEXT: }
-; CHECK-NEXT: Successor(s): middle.split
-; CHECK-EMPTY:
-; CHECK-NEXT: middle.split:
-; CHECK-NEXT:   EMIT branch-on-cond vp<[[EA_TAKEN]]>
 ; CHECK-NEXT: Successor(s): vector.early.exit, middle.block
 ; CHECK-EMPTY:
 ; CHECK-NEXT: middle.block:
@@ -218,12 +202,12 @@ define i64 @multi_exiting_to_same_exit_live_in_exit_values_2() {
 ; CHECK-NEXT: Successor(s): ir-bb<exit>
 ; CHECK-EMPTY:
 ; CHECK-NEXT: ir-bb<exit>:
-; CHECK-NEXT:   IR %p = phi i64 [ 0, %loop.header ], [ 1, %loop.latch ] (extra operands: ir<1> from middle.block, ir<0> from vector.early.exit)
+; CHECK-NEXT:   IR %p = phi i64 [ 0, %loop.header ], [ 1, %loop.latch ] (extra operands: ir<0> from middle.block, ir<1> from vector.early.exit)
 ; CHECK-NEXT: No successors
 ; CHECK-EMPTY:
 ; CHECK-NEXT: scalar.ph:
 ; CHECK-NEXT:   EMIT-SCALAR vp<[[RESUME:%.+]]> = phi [ vp<[[VTC]]>, middle.block ], [ ir<0>, ir-bb<entry> ]
-; CHECK-NEXT: ir-bb<loop.header>
+; CHECK-NEXT: Successor(s): ir-bb<loop.header>
 ; CHECK-EMPTY:
 ; CHECK-NEXT: ir-bb<loop.header>:
 ; CHECK-NEXT:   IR   %iv = phi i64 [ %inc, %loop.latch ], [ 0, %entry ] (extra operand: vp<[[RESUME]]> from scalar.ph)
diff --git a/llvm/test/Transforms/LoopVectorize/vector-loop-backedge-elimination-early-exit.ll b/llvm/test/Transforms/LoopVectorize/vector-loop-backedge-elimination-early-exit.ll
index 90fbf7426514f..b6644ef2d6b8b 100644
--- a/llvm/test/Transforms/LoopVectorize/vector-loop-backedge-elimination-early-exit.ll
+++ b/llvm/test/Transforms/LoopVectorize/vector-loop-backedge-elimination-early-exit.ll
@@ -15,7 +15,7 @@ define i8 @test_early_exit_max_tc_less_than_16(ptr dereferenceable(16) %A) nosyn
 ; VF8UF1:       [[VECTOR_PH]]:
 ; VF8UF1-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; VF8UF1:       [[VECTOR_BODY]]:
-; VF8UF1-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
+; VF8UF1-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
 ; VF8UF1-NEXT:    [[P_SRC:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[INDEX]]
 ; VF8UF1-NEXT:    [[WIDE_LOAD:%.*]] = load <8 x i8>, ptr [[P_SRC]], align 1
 ; VF8UF1-NEXT:    [[TMP3:%.*]] = icmp eq <8 x i8> [[WIDE_LOAD]], zeroinitializer
@@ -23,10 +23,9 @@ define i8 @test_early_exit_max_tc_less_than_16(ptr dereferenceable(16) %A) nosyn
 ; VF8UF1-NEXT:    [[TMP2:%.*]] = freeze <8 x i1> [[TMP3]]
 ; VF8UF1-NEXT:    [[TMP4:%.*]] = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> [[TMP2]])
 ; VF8UF1-NEXT:    [[TMP5:%.*]] = icmp eq i64 [[INDEX_NEXT]], 16
-; VF8UF1-NEXT:    [[TMP6:%.*]] = or i1 [[TMP4]], [[TMP5]]
-; VF8UF1-NEXT:    br i1 [[TMP6]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
-; VF8UF1:       [[MIDDLE_SPLIT]]:
-; VF8UF1-NEXT:    br i1 [[TMP4]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; VF8UF1-NEXT:    br i1 [[TMP4]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; VF8UF1:       [[VECTOR_BODY_MULTI_COND_1]]:
+; VF8UF1-NEXT:    br i1 [[TMP5]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; VF8UF1:       [[MIDDLE_BLOCK]]:
 ; VF8UF1-NEXT:    br label %[[EXIT:.*]]
 ; VF8UF1:       [[VECTOR_EARLY_EXIT]]:
@@ -42,18 +41,22 @@ define i8 @test_early_exit_max_tc_less_than_16(ptr dereferenceable(16) %A) nosyn
 ; VF8UF2:       [[VECTOR_PH]]:
 ; VF8UF2-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; VF8UF2:       [[VECTOR_BODY]]:
-; VF8UF2-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 8
-; VF8UF2-NEXT:    [[WIDE_LOAD:%.*]] = load <8 x i8>, ptr [[A]], align 1
+; VF8UF2-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
+; VF8UF2-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[INDEX]]
+; VF8UF2-NEXT:    [[TMP7:%.*]] = getelementptr inbounds i8, ptr [[TMP0]], i64 8
 ; VF8UF2-NEXT:    [[WIDE_LOAD1:%.*]] = load <8 x i8>, ptr [[TMP0]], align 1
-; VF8UF2-NEXT:    [[TMP1:%.*]] = icmp eq <8 x i8> [[WIDE_LOAD]], zeroinitializer
-; VF8UF2-NEXT:    [[TMP2:%.*]] = icmp eq <8 x i8> [[WIDE_LOAD1]], zeroinitializer
+; VF8UF2-NEXT:    [[WIDE_LOAD2:%.*]] = load <8 x i8>, ptr [[TMP7]], align 1
+; VF8UF2-NEXT:    [[TMP1:%.*]] = icmp eq <8 x i8> [[WIDE_LOAD1]], zeroinitializer
+; VF8UF2-NEXT:    [[TMP2:%.*]] = icmp eq <8 x i8> [[WIDE_LOAD2]], zeroinitializer
+; VF8UF2-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 16
 ; VF8UF2-NEXT:    [[TMP6:%.*]] = freeze <8 x i1> [[TMP1]]
 ; VF8UF2-NEXT:    [[TMP5:%.*]] = freeze <8 x i1> [[TMP2]]
 ; VF8UF2-NEXT:    [[TMP3:%.*]] = or <8 x i1> [[TMP6]], [[TMP5]]
 ; VF8UF2-NEXT:    [[TMP4:%.*]] = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> [[TMP3]])
-; VF8UF2-NEXT:    br label %[[MIDDLE_SPLIT:.*]]
-; VF8UF2:       [[MIDDLE_SPLIT]]:
-; VF8UF2-NEXT:    br i1 [[TMP4]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; VF8UF2-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT]], 16
+; VF8UF2-NEXT:    br i1 [[TMP4]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; VF8UF2:       [[VECTOR_BODY_MULTI_COND_1]]:
+; VF8UF2-NEXT:    br i1 [[TMP8]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; VF8UF2:       [[MIDDLE_BLOCK]]:
 ; VF8UF2-NEXT:    br label %[[EXIT:.*]]
 ; VF8UF2:       [[VECTOR_EARLY_EXIT]]:
@@ -69,13 +72,17 @@ define i8 @test_early_exit_max_tc_less_than_16(ptr dereferenceable(16) %A) nosyn
 ; VF16UF1:       [[VECTOR_PH]]:
 ; VF16UF1-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; VF16UF1:       [[VECTOR_BODY]]:
-; VF16UF1-NEXT:    [[WIDE_LOAD:%.*]] = load <16 x i8>, ptr [[A]], align 1
+; VF16UF1-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
+; VF16UF1-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[INDEX]]
+; VF16UF1-NEXT:    [[WIDE_LOAD:%.*]] = load <16 x i8>, ptr [[TMP0]], align 1
 ; VF16UF1-NEXT:    [[TMP3:%.*]] = icmp eq <16 x i8> [[WIDE_LOAD]], zeroinitializer
+; VF16UF1-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 16
 ; VF16UF1-NEXT:    [[TMP1:%.*]] = freeze <16 x i1> [[TMP3]]
 ; VF16UF1-NEXT:    [[TMP2:%.*]] = call i1 @llvm.vector.reduce.or.v16i1(<16 x i1> [[TMP1]])
-; VF16UF1-NEXT:    br label %[[MIDDLE_SPLIT:.*]]
-; VF16UF1:       [[MIDDLE_SPLIT]]:
-; VF16UF1-NEXT:    br i1 [[TMP2]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; VF16UF1-NEXT:    [[TMP4:%.*]] = icmp eq i64 [[INDEX_NEXT]], 16
+; VF16UF1-NEXT:    br i1 [[TMP2]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; VF16UF1:       [[VECTOR_BODY_MULTI_COND_1]]:
+; VF16UF1-NEXT:    br i1 [[TMP4]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; VF16UF1:       [[MIDDLE_BLOCK]]:
 ; VF16UF1-NEXT:    br label %[[EXIT:.*]]
 ; VF16UF1:       [[VECTOR_EARLY_EXIT]]:
@@ -112,7 +119,7 @@ define i64 @test_early_exit_max_tc_less_than_16_with_iv_used_outside(ptr derefer
 ; VF8UF1:       [[VECTOR_PH]]:
 ; VF8UF1-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; VF8UF1:       [[VECTOR_BODY]]:
-; VF8UF1-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
+; VF8UF1-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
 ; VF8UF1-NEXT:    [[P_SRC:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[INDEX]]
 ; VF8UF1-NEXT:    [[WIDE_LOAD:%.*]] = load <8 x i8>, ptr [[P_SRC]], align 1
 ; VF8UF1-NEXT:    [[TMP3:%.*]] = icmp eq <8 x i8> [[WIDE_LOAD]], zeroinitializer
@@ -120,10 +127,9 @@ define i64 @test_early_exit_max_tc_less_than_16_with_iv_used_outside(ptr derefer
 ; VF8UF1-NEXT:    [[TMP2:%.*]] = freeze <8 x i1> [[TMP3]]
 ; VF8UF1-NEXT:    [[TMP4:%.*]] = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> [[TMP2]])
 ; VF8UF1-NEXT:    [[TMP5:%.*]] = icmp eq i64 [[INDEX_NEXT]], 16
-; VF8UF1-NEXT:    [[TMP6:%.*]] = or i1 [[TMP4]], [[TMP5]]
-; VF8UF1-NEXT:    br i1 [[TMP6]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
-; VF8UF1:       [[MIDDLE_SPLIT]]:
-; VF8UF1-NEXT:    br i1 [[TMP4]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; VF8UF1-NEXT:    br i1 [[TMP4]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; VF8UF1:       [[VECTOR_BODY_MULTI_COND_1]]:
+; VF8UF1-NEXT:    br i1 [[TMP5]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
 ; VF8UF1:       [[MIDDLE_BLOCK]]:
 ; VF8UF1-NEXT:    br label %[[EXIT:.*]]
 ; VF8UF1:       [[VECTOR_EARLY_EXIT]]:
@@ -141,18 +147,22 @@ define i64 @test_early_exit_max_tc_less_than_16_with_iv_used_outside(ptr derefer
 ; VF8UF2:       [[VECTOR_PH]]:
 ; VF8UF2-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; VF8UF2:       [[VECTOR_BODY]]:
-; VF8UF2-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 8
-; VF8UF2-NEXT:    [[WIDE_LOAD:%.*]] = load <8 x i8>, ptr [[A]], align 1
+; VF8UF2-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
+; VF8UF2-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[INDEX]]
+; VF8UF2-NEXT:    [[TMP12:%.*]] = getelementptr inbounds i8, ptr [[TMP0]], i64 8
 ; VF8UF2-NEXT:    [[WIDE_LOAD1:%.*]] = load <8 x i8>, ptr [[TMP0]], align 1
-; VF8UF2-NEXT:    [[TMP1:%.*]] = icmp eq <8 x i8> [[WIDE_LOAD]], zeroinitializer
-; VF8UF2-NEXT:    [[TMP2:%.*]] = icmp eq <8 x i8> [[WIDE_LOAD1]], zeroinitializer
+; VF8UF2-NEXT:    [[WIDE_LOAD2:%.*]] = load <8 x i8>, ptr [[TMP12]], align 1
+; VF8UF2-NEXT:    [[TMP1:%.*]] = icmp eq <8 x i8> [[WIDE_LOAD1]], zeroinitializer
+; VF8UF2-NEXT:    [[TMP2:%.*]] = icmp eq <8 x i8> [[WIDE_LOAD2]], zeroinitializer
+; VF8UF2-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 16
 ; VF8UF2-NEXT:    [[TMP13:%.*]] = freeze <8 x i1> [[TMP1]]
 ; VF8UF2-NEXT:    [[TMP6:%.*]] = freeze <8 x i1> [[TMP2]]
 ; VF8UF2-NEXT:    [[TMP3:%.*]] = or <8 x i1> [[TMP13]], [[TMP6]]
 ; VF8UF2-NEXT:    [[TMP4:%.*]] = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> [[TMP3]])
-; VF8UF2-NEXT:    br label %[[MIDDLE_SPLIT:.*]]
-; VF8UF2:       [[MIDDLE_SPLIT]]:
-; VF8UF2-NEXT:    br i1 [[TMP4]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; VF8UF2-NEXT:    [[TMP14:%.*]] = icmp eq i64 [[INDEX_NEXT]], 16
+; VF8UF2-NEXT:    br i1 [[TMP4]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; VF8UF2:       [[VECTOR_BODY_MULTI_COND_1]]:
+; VF8UF2-NEXT:    br i1 [[TMP14]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
 ; VF8UF2:       [[MIDDLE_BLOCK]]:
 ; VF8UF2-NEXT:    br label %[[EXIT:.*]]
 ; VF8UF2:       [[VECTOR_EARLY_EXIT]]:
@@ -162,9 +172,10 @@ define i64 @test_early_exit_max_tc_less_than_16_with_iv_used_outside(ptr derefer
 ; VF8UF2-NEXT:    [[TMP9:%.*]] = add i64 0, [[TMP8]]
 ; VF8UF2-NEXT:    [[TMP10:%.*]] = icmp ne i64 [[TMP8]], 8
 ; VF8UF2-NEXT:    [[TMP11:%.*]] = select i1 [[TMP10]], i64 [[TMP9]], i64 [[TMP7]]
+; VF8UF2-NEXT:    [[TMP15:%.*]] = add i64 [[INDEX]], [[TMP11]]
 ; VF8UF2-NEXT:    br label %[[EXIT]]
 ; VF8UF2:       [[EXIT]]:
-; VF8UF2-NEXT:    [[RES:%.*]] = phi i64 [ [[TMP11]], %[[VECTOR_EARLY_EXIT]] ], [ 1, %[[MIDDLE_BLOCK]] ]
+; VF8UF2-NEXT:    [[RES:%.*]] = phi i64 [ [[TMP15]], %[[VECTOR_EARLY_EXIT]] ], [ 1, %[[MIDDLE_BLOCK]] ]
 ; VF8UF2-NEXT:    ret i64 [[RES]]
 ;
 ; VF16UF1-LABEL: define i64 @test_early_exit_max_tc_less_than_16_with_iv_used_outside(
@@ -174,20 +185,25 @@ define i64 @test_early_exit_max_tc_less_than_16_with_iv_used_outside(ptr derefer
 ; VF16UF1:       [[VECTOR_PH]]:
 ; VF16UF1-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; VF16UF1:       [[VECTOR_BODY]]:
-; VF16UF1-NEXT:    [[WIDE_LOAD:%.*]] = load <16 x i8>, ptr [[A]], align 1
+; VF16UF1-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
+; VF16UF1-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[INDEX]]
+; VF16UF1-NEXT:    [[WIDE_LOAD:%.*]] = load <16 x i8>, ptr [[TMP0]], align 1
 ; VF16UF1-NEXT:    [[TMP3:%.*]] = icmp eq <16 x i8> [[WIDE_LOAD]], zeroinitializer
+; VF16UF1-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 16
 ; VF16UF1-NEXT:    [[TMP1:%.*]] = freeze <16 x i1> [[TMP3]]
 ; VF16UF1-NEXT:    [[TMP2:%.*]] = call i1 @llvm.vector.reduce.or.v16i1(<16 x i1> [[TMP1]])
-; VF16UF1-NEXT:    br label %[[MIDDLE_SPLIT:.*]]
-; VF16UF1:       [[MIDDLE_SPLIT]]:
-; VF16UF1-NEXT:    br i1 [[TMP2]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; VF16UF1-NEXT:    [[TMP4:%.*]] = icmp eq i64 [[INDEX_NEXT]], 16
+; VF16UF1-NEXT:    br i1 [[TMP2]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; VF16UF1:       [[VECTOR_BODY_MULTI_COND_1]]:
+; VF16UF1-NEXT:    br i1 [[TMP4]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
 ; VF16UF1:       [[MIDDLE_BLOCK]]:
 ; VF16UF1-NEXT:    br label %[[EXIT:.*]]
 ; VF16UF1:       [[VECTOR_EARLY_EXIT]]:
 ; VF16UF1-NEXT:    [[FIRST_ACTIVE_LANE:%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v16i1(<16 x i1> [[TMP3]], i1 false)
+; VF16UF1-NEXT:    [[TMP6:%.*]] = add i64 [[INDEX]], [[FIRST_ACTIVE_LANE]]
 ; VF16UF1-NEXT:    br label %[[EXIT]]
 ; VF16UF1:       [[EXIT]]:
-; VF16UF1-NEXT:    [[RES:%.*]] = phi i64 [ [[FIRST_ACTIVE_LANE]], %[[VECTOR_EARLY_EXIT]] ], [ 1, %[[MIDDLE_BLOCK]] ]
+; VF16UF1-NEXT:    [[RES:%.*]] = phi i64 [ [[TMP6]], %[[VECTOR_EARLY_EXIT]] ], [ 1, %[[MIDDLE_BLOCK]] ]
 ; VF16UF1-NEXT:    ret i64 [[RES]]
 ;
 entry:
@@ -218,7 +234,7 @@ define i8 @test_early_exit_max_vector_tc_eq_16(ptr dereferenceable(17) %A) nosyn
 ; VF8UF1:       [[VECTOR_PH]]:
 ; VF8UF1-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; VF8UF1:       [[VECTOR_BODY]]:
-; VF8UF1-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
+; VF8UF1-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
 ; VF8UF1-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[INDEX]]
 ; VF8UF1-NEXT:    [[WIDE_LOAD:%.*]] = load <8 x i8>, ptr [[TMP0]], align 1
 ; VF8UF1-NEXT:    [[TMP1:%.*]] = icmp eq <8 x i8> [[WIDE_LOAD]], zeroinitializer
@@ -226,10 +242,9 @@ define i8 @test_early_exit_max_vector_tc_eq_16(ptr dereferenceable(17) %A) nosyn
 ; VF8UF1-NEXT:    [[TMP5:%.*]] = freeze <8 x i1> [[TMP1]]
 ; VF8UF1-NEXT:    [[TMP2:%.*]] = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> [[TMP5]])
 ; VF8UF1-NEXT:    [[TMP3:%.*]] = icmp eq i64 [[INDEX_NEXT]], 16
-; VF8UF1-NEXT:    [[TMP4:%.*]] = or i1 [[TMP2]], [[TMP3]]
-; VF8UF1-NEXT:    br i1 [[TMP4]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
-; VF8UF1:       [[MIDDLE_SPLIT]]:
-; VF8UF1-NEXT:    br i1 [[TMP2]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; VF8UF1-NEXT:    br i1 [[TMP2]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; VF8UF1:       [[VECTOR_BODY_MULTI_COND_1]]:
+; VF8UF1-NEXT:    br i1 [[TMP3]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
 ; VF8UF1:       [[MIDDLE_BLOCK]]:
 ; VF8UF1-NEXT:    br label %[[SCALAR_PH:.*]]
 ; VF8UF1:       [[VECTOR_EARLY_EXIT]]:
@@ -257,18 +272,22 @@ define i8 @test_early_exit_max_vector_tc_eq_16(ptr dereferenceable(17) %A) nosyn
 ; VF8UF2:       [[VECTOR_PH]]:
 ; VF8UF2-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; VF8UF2:       [[VECTOR_BODY]]:
-; VF8UF2-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 8
-; VF8UF2-NEXT:    [[WIDE_LOAD:%.*]] = load <8 x i8>, ptr [[A]], align 1
+; VF8UF2-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
+; VF8UF2-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[INDEX]]
+; VF8UF2-NEXT:    [[TMP9:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 8
 ; VF8UF2-NEXT:    [[WIDE_LOAD1:%.*]] = load <8 x i8>, ptr [[TMP1]], align 1
-; VF8UF2-NEXT:    [[TMP2:%.*]] = icmp eq <8 x i8> [[WIDE_LOAD]], zeroinitializer
-; VF8UF2-NEXT:    [[TMP3:%.*]] = icmp eq <8 x i8> [[WIDE_LOAD1]], zeroinitializer
+; VF8UF2-NEXT:    [[WIDE_LOAD2:%.*]] = load <8 x i8>, ptr [[TMP9]], align 1
+; VF8UF2-NEXT:    [[TMP2:%.*]] = icmp eq <8 x i8> [[WIDE_LOAD1]], zeroinitializer
+; VF8UF2-NEXT:    [[TMP3:%.*]] = icmp eq <8 x i8> [[WIDE_LOAD2]], zeroinitializer
+; VF8UF2-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 16
 ; VF8UF2-NEXT:    [[TMP7:%.*]] = freeze <8 x i1> [[TMP2]]
 ; VF8UF2-NEXT:    [[TMP6:%.*]] = freeze <8 x i1> [[TMP3]]
 ; VF8UF2-NEXT:    [[TMP4:%.*]] = or <8 x i1> [[TMP7]], [[TMP6]]
 ; VF8UF2-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> [[TMP4]])
-; VF8UF2-NEXT:    br label %[[MIDDLE_SPLIT:.*]]
-; VF8UF2:       [[MIDDLE_SPLIT]]:
-; VF8UF2-NEXT:    br i1 [[TMP5]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; VF8UF2-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT]], 16
+; VF8UF2-NEXT:    br i1 [[TMP5]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; VF8UF2:       [[VECTOR_BODY_MULTI_COND_1]]:
+; VF8UF2-NEXT:    br i1 [[TMP8]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
 ; VF8UF2:       [[MIDDLE_BLOCK]]:
 ; VF8UF2-NEXT:    br label %[[SCALAR_PH:.*]]
 ; VF8UF2:       [[VECTOR_EARLY_EXIT]]:
@@ -284,7 +303,7 @@ define i8 @test_early_exit_max_vector_tc_eq_16(ptr dereferenceable(17) %A) nosyn
 ; VF8UF2:       [[LOOP_LATCH]]:
 ; VF8UF2-NEXT:    [[IV_NEXT]] = add nsw i64 [[IV]], 1
 ; VF8UF2-NEXT:    [[CMP:%.*]] = icmp eq i64 [[IV_NEXT]], 17
-; VF8UF2-NEXT:    br i1 [[CMP]], label %[[EXIT]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP0:![0-9]+]]
+; VF8UF2-NEXT:    br i1 [[CMP]], label %[[EXIT]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP5:![0-9]+]]
 ; VF8UF2:       [[EXIT]]:
 ; VF8UF2-NEXT:    [[RES:%.*]] = phi i8 [ 0, %[[LOOP_HEADER]] ], [ 1, %[[LOOP_LATCH]] ], [ 0, %[[VECTOR_EARLY_EXIT]] ]
 ; VF8UF2-NEXT:    ret i8 [[RES]]
@@ -296,13 +315,17 @@ define i8 @test_early_exit_max_vector_tc_eq_16(ptr dereferenceable(17) %A) nosyn
 ; VF16UF1:       [[VECTOR_PH]]:
 ; VF16UF1-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; VF16UF1:       [[VECTOR_BODY]]:
-; VF16UF1-NEXT:    [[WIDE_LOAD:%.*]] = load <16 x i8>, ptr [[A]], align 1
+; VF16UF1-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
+; VF16UF1-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[INDEX]]
+; VF16UF1-NEXT:    [[WIDE_LOAD:%.*]] = load <16 x i8>, ptr [[TMP0]], align 1
 ; VF16UF1-NEXT:    [[TMP1:%.*]] = icmp eq <16 x i8> [[WIDE_LOAD]], zeroinitializer
+; VF16UF1-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 16
 ; VF16UF1-NEXT:    [[TMP3:%.*]] = freeze <16 x i1> [[TMP1]]
 ; VF16UF1-NEXT:    [[TMP2:%.*]] = call i1 @llvm.vector.reduce.or.v16i1(<16 x i1> [[TMP3]])
-; VF16UF1-NEXT:    br label %[[MIDDLE_SPLIT:.*]]
-; VF16UF1:       [[MIDDLE_SPLIT]]:
-; VF16UF1-NEXT:    br i1 [[TMP2]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; VF16UF1-NEXT:    [[TMP4:%.*]] = icmp eq i64 [[INDEX_NEXT]], 16
+; VF16UF1-NEXT:    br i1 [[TMP2]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[VECTOR_BODY_MULTI_COND_1]]
+; VF16UF1:       [[VECTOR_BODY_MULTI_COND_1]]:
+; VF16UF1-NEXT:    br i1 [[TMP4]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
 ; VF16UF1:       [[MIDDLE_BLOCK]]:
 ; VF16UF1-NEXT:    br label %[[SCALAR_PH:.*]]
 ; VF16UF1:       [[VECTOR_EARLY_EXIT]]:
@@ -318,7 +341,7 @@ define i8 @test_early_exit_max_vector_tc_eq_16(ptr dereferenceable(17) %A) nosyn
 ; VF16UF1:       [[LOOP_LATCH]]:
 ; VF16UF1-NEXT:    [[IV_NEXT]] = add nsw i64 [[IV]], 1
 ; VF16UF1-NEXT:    [[CMP:%.*]] = icmp eq i64 [[IV_NEXT]], 17
-; VF16UF1-NEXT:    br i1 [[CMP]], label %[[EXIT]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP0:![0-9]+]]
+; VF16UF1-NEXT:    br i1 [[CMP]], label %[[EXIT]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP5:![0-9]+]]
 ; VF16UF1:       [[EXIT]]:
 ; VF16UF1-NEXT:    [[RES:%.*]] = phi i8 [ 0, %[[LOOP_HEADER]] ], [ 1, %[[LOOP_LATCH]] ], [ 0, %[[VECTOR_EARLY_EXIT]] ]
 ; VF16UF1-NEXT:    ret i8 [[RES]]
diff --git a/llvm/test/Transforms/PhaseOrdering/AArch64/std-find.ll b/llvm/test/Transforms/PhaseOrdering/AArch64/std-find.ll
index 87ceecaf3ed42..f83964d157359 100644
--- a/llvm/test/Transforms/PhaseOrdering/AArch64/std-find.ll
+++ b/llvm/test/Transforms/PhaseOrdering/AArch64/std-find.ll
@@ -11,30 +11,142 @@ define i64 @std_find_i16_constant_offset_with_assumptions(ptr %first.coerce, i16
 ; CHECK-NEXT:    [[COERCE_VAL_IP:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 256
 ; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <8 x i16> poison, i16 [[S]], i64 0
 ; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <8 x i16> [[BROADCAST_SPLATINSERT]], <8 x i16> poison, <8 x i32> zeroinitializer
-; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]
-; CHECK:       [[VECTOR_BODY]]:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
-; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = shl i64 [[INDEX]], 1
-; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 [[OFFSET_IDX]]
+; CHECK-NEXT:    [[WIDE_LOAD1:%.*]] = load <8 x i16>, ptr [[FIRST_COERCE]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD_FR1:%.*]] = freeze <8 x i16> [[WIDE_LOAD1]]
+; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR1]], [[BROADCAST_SPLAT]]
+; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <8 x i1> [[TMP2]] to i8
+; CHECK-NEXT:    [[DOTNOT:%.*]] = icmp eq i8 [[TMP3]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT]], label %[[VECTOR_BODY_MULTI_COND_1:.*]], label %[[VECTOR_EARLY_EXIT:.*]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1]]:
+; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 16
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <8 x i16>, ptr [[NEXT_GEP]], align 2
 ; CHECK-NEXT:    [[WIDE_LOAD_FR:%.*]] = freeze <8 x i16> [[WIDE_LOAD]]
 ; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR]], [[BROADCAST_SPLAT]]
-; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 8
 ; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i1> [[TMP0]] to i8
-; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i8 [[TMP1]], 0
-; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i64 [[INDEX_NEXT]], 128
-; CHECK-NEXT:    [[TMP4:%.*]] = or i1 [[TMP2]], [[TMP3]]
-; CHECK-NEXT:    br i1 [[TMP4]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
-; CHECK:       [[MIDDLE_SPLIT]]:
-; CHECK-NEXT:    br i1 [[TMP2]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[RETURN:.*]]
+; CHECK-NEXT:    [[DOTNOT_1:%.*]] = icmp eq i8 [[TMP1]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT_1]], label %[[VECTOR_BODY_MULTI_COND_1_1:.*]], label %[[VECTOR_EARLY_EXIT]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1_1]]:
+; CHECK-NEXT:    [[NEXT_GEP_2:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 32
+; CHECK-NEXT:    [[WIDE_LOAD_2:%.*]] = load <8 x i16>, ptr [[NEXT_GEP_2]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD_FR_2:%.*]] = freeze <8 x i16> [[WIDE_LOAD_2]]
+; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR_2]], [[BROADCAST_SPLAT]]
+; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <8 x i1> [[TMP4]] to i8
+; CHECK-NEXT:    [[DOTNOT_2:%.*]] = icmp eq i8 [[TMP5]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT_2]], label %[[VECTOR_BODY_MULTI_COND_1_2:.*]], label %[[VECTOR_EARLY_EXIT]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1_2]]:
+; CHECK-NEXT:    [[NEXT_GEP_3:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 48
+; CHECK-NEXT:    [[WIDE_LOAD_3:%.*]] = load <8 x i16>, ptr [[NEXT_GEP_3]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD_FR_3:%.*]] = freeze <8 x i16> [[WIDE_LOAD_3]]
+; CHECK-NEXT:    [[TMP6:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR_3]], [[BROADCAST_SPLAT]]
+; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i1> [[TMP6]] to i8
+; CHECK-NEXT:    [[DOTNOT_3:%.*]] = icmp eq i8 [[TMP7]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT_3]], label %[[VECTOR_BODY_MULTI_COND_1_3:.*]], label %[[VECTOR_EARLY_EXIT]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1_3]]:
+; CHECK-NEXT:    [[NEXT_GEP_4:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 64
+; CHECK-NEXT:    [[WIDE_LOAD_4:%.*]] = load <8 x i16>, ptr [[NEXT_GEP_4]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD_FR_4:%.*]] = freeze <8 x i16> [[WIDE_LOAD_4]]
+; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR_4]], [[BROADCAST_SPLAT]]
+; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <8 x i1> [[TMP8]] to i8
+; CHECK-NEXT:    [[DOTNOT_4:%.*]] = icmp eq i8 [[TMP9]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT_4]], label %[[VECTOR_BODY_MULTI_COND_1_4:.*]], label %[[VECTOR_EARLY_EXIT]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1_4]]:
+; CHECK-NEXT:    [[NEXT_GEP_5:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 80
+; CHECK-NEXT:    [[WIDE_LOAD_5:%.*]] = load <8 x i16>, ptr [[NEXT_GEP_5]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD_FR_5:%.*]] = freeze <8 x i16> [[WIDE_LOAD_5]]
+; CHECK-NEXT:    [[TMP10:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR_5]], [[BROADCAST_SPLAT]]
+; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <8 x i1> [[TMP10]] to i8
+; CHECK-NEXT:    [[DOTNOT_5:%.*]] = icmp eq i8 [[TMP11]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT_5]], label %[[VECTOR_BODY_MULTI_COND_1_5:.*]], label %[[VECTOR_EARLY_EXIT]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1_5]]:
+; CHECK-NEXT:    [[NEXT_GEP_6:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 96
+; CHECK-NEXT:    [[WIDE_LOAD_6:%.*]] = load <8 x i16>, ptr [[NEXT_GEP_6]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD_FR_6:%.*]] = freeze <8 x i16> [[WIDE_LOAD_6]]
+; CHECK-NEXT:    [[TMP12:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR_6]], [[BROADCAST_SPLAT]]
+; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <8 x i1> [[TMP12]] to i8
+; CHECK-NEXT:    [[DOTNOT_6:%.*]] = icmp eq i8 [[TMP13]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT_6]], label %[[VECTOR_BODY_MULTI_COND_1_6:.*]], label %[[VECTOR_EARLY_EXIT]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1_6]]:
+; CHECK-NEXT:    [[NEXT_GEP_7:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 112
+; CHECK-NEXT:    [[WIDE_LOAD_7:%.*]] = load <8 x i16>, ptr [[NEXT_GEP_7]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD_FR_7:%.*]] = freeze <8 x i16> [[WIDE_LOAD_7]]
+; CHECK-NEXT:    [[TMP14:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR_7]], [[BROADCAST_SPLAT]]
+; CHECK-NEXT:    [[TMP15:%.*]] = bitcast <8 x i1> [[TMP14]] to i8
+; CHECK-NEXT:    [[DOTNOT_7:%.*]] = icmp eq i8 [[TMP15]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT_7]], label %[[VECTOR_BODY_MULTI_COND_1_7:.*]], label %[[VECTOR_EARLY_EXIT]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1_7]]:
+; CHECK-NEXT:    [[NEXT_GEP_8:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 128
+; CHECK-NEXT:    [[WIDE_LOAD_8:%.*]] = load <8 x i16>, ptr [[NEXT_GEP_8]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD_FR_8:%.*]] = freeze <8 x i16> [[WIDE_LOAD_8]]
+; CHECK-NEXT:    [[TMP16:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR_8]], [[BROADCAST_SPLAT]]
+; CHECK-NEXT:    [[TMP17:%.*]] = bitcast <8 x i1> [[TMP16]] to i8
+; CHECK-NEXT:    [[DOTNOT_8:%.*]] = icmp eq i8 [[TMP17]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT_8]], label %[[VECTOR_BODY_MULTI_COND_1_8:.*]], label %[[VECTOR_EARLY_EXIT]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1_8]]:
+; CHECK-NEXT:    [[NEXT_GEP_9:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 144
+; CHECK-NEXT:    [[WIDE_LOAD_9:%.*]] = load <8 x i16>, ptr [[NEXT_GEP_9]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD_FR_9:%.*]] = freeze <8 x i16> [[WIDE_LOAD_9]]
+; CHECK-NEXT:    [[TMP18:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR_9]], [[BROADCAST_SPLAT]]
+; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <8 x i1> [[TMP18]] to i8
+; CHECK-NEXT:    [[DOTNOT_9:%.*]] = icmp eq i8 [[TMP19]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT_9]], label %[[VECTOR_BODY_MULTI_COND_1_9:.*]], label %[[VECTOR_EARLY_EXIT]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1_9]]:
+; CHECK-NEXT:    [[NEXT_GEP_10:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 160
+; CHECK-NEXT:    [[WIDE_LOAD_10:%.*]] = load <8 x i16>, ptr [[NEXT_GEP_10]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD_FR_10:%.*]] = freeze <8 x i16> [[WIDE_LOAD_10]]
+; CHECK-NEXT:    [[TMP20:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR_10]], [[BROADCAST_SPLAT]]
+; CHECK-NEXT:    [[TMP21:%.*]] = bitcast <8 x i1> [[TMP20]] to i8
+; CHECK-NEXT:    [[DOTNOT_10:%.*]] = icmp eq i8 [[TMP21]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT_10]], label %[[VECTOR_BODY_MULTI_COND_1_10:.*]], label %[[VECTOR_EARLY_EXIT]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1_10]]:
+; CHECK-NEXT:    [[NEXT_GEP_11:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 176
+; CHECK-NEXT:    [[WIDE_LOAD_11:%.*]] = load <8 x i16>, ptr [[NEXT_GEP_11]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD_FR_11:%.*]] = freeze <8 x i16> [[WIDE_LOAD_11]]
+; CHECK-NEXT:    [[TMP22:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR_11]], [[BROADCAST_SPLAT]]
+; CHECK-NEXT:    [[TMP23:%.*]] = bitcast <8 x i1> [[TMP22]] to i8
+; CHECK-NEXT:    [[DOTNOT_11:%.*]] = icmp eq i8 [[TMP23]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT_11]], label %[[VECTOR_BODY_MULTI_COND_1_11:.*]], label %[[VECTOR_EARLY_EXIT]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1_11]]:
+; CHECK-NEXT:    [[NEXT_GEP_12:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 192
+; CHECK-NEXT:    [[WIDE_LOAD_12:%.*]] = load <8 x i16>, ptr [[NEXT_GEP_12]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD_FR_12:%.*]] = freeze <8 x i16> [[WIDE_LOAD_12]]
+; CHECK-NEXT:    [[TMP24:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR_12]], [[BROADCAST_SPLAT]]
+; CHECK-NEXT:    [[TMP25:%.*]] = bitcast <8 x i1> [[TMP24]] to i8
+; CHECK-NEXT:    [[DOTNOT_12:%.*]] = icmp eq i8 [[TMP25]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT_12]], label %[[VECTOR_BODY_MULTI_COND_1_12:.*]], label %[[VECTOR_EARLY_EXIT]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1_12]]:
+; CHECK-NEXT:    [[NEXT_GEP_13:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 208
+; CHECK-NEXT:    [[WIDE_LOAD_13:%.*]] = load <8 x i16>, ptr [[NEXT_GEP_13]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD_FR_13:%.*]] = freeze <8 x i16> [[WIDE_LOAD_13]]
+; CHECK-NEXT:    [[TMP26:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR_13]], [[BROADCAST_SPLAT]]
+; CHECK-NEXT:    [[TMP27:%.*]] = bitcast <8 x i1> [[TMP26]] to i8
+; CHECK-NEXT:    [[DOTNOT_13:%.*]] = icmp eq i8 [[TMP27]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT_13]], label %[[VECTOR_BODY_MULTI_COND_1_13:.*]], label %[[VECTOR_EARLY_EXIT]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1_13]]:
+; CHECK-NEXT:    [[NEXT_GEP_14:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 224
+; CHECK-NEXT:    [[WIDE_LOAD_14:%.*]] = load <8 x i16>, ptr [[NEXT_GEP_14]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD_FR_14:%.*]] = freeze <8 x i16> [[WIDE_LOAD_14]]
+; CHECK-NEXT:    [[TMP28:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR_14]], [[BROADCAST_SPLAT]]
+; CHECK-NEXT:    [[TMP29:%.*]] = bitcast <8 x i1> [[TMP28]] to i8
+; CHECK-NEXT:    [[DOTNOT_14:%.*]] = icmp eq i8 [[TMP29]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT_14]], label %[[VECTOR_BODY_MULTI_COND_1_14:.*]], label %[[VECTOR_EARLY_EXIT]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1_14]]:
+; CHECK-NEXT:    [[NEXT_GEP_15:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 240
+; CHECK-NEXT:    [[WIDE_LOAD_15:%.*]] = load <8 x i16>, ptr [[NEXT_GEP_15]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD_FR_15:%.*]] = freeze <8 x i16> [[WIDE_LOAD_15]]
+; CHECK-NEXT:    [[TMP30:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR_15]], [[BROADCAST_SPLAT]]
+; CHECK-NEXT:    [[TMP31:%.*]] = bitcast <8 x i1> [[TMP30]] to i8
+; CHECK-NEXT:    [[DOTNOT_15:%.*]] = icmp eq i8 [[TMP31]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT_15]], label %[[RETURN:.*]], label %[[VECTOR_EARLY_EXIT]]
 ; CHECK:       [[VECTOR_EARLY_EXIT]]:
-; CHECK-NEXT:    [[TMP5:%.*]] = tail call i64 @llvm.experimental.cttz.elts.i64.v8i1(<8 x i1> [[TMP0]], i1 false)
-; CHECK-NEXT:    [[TMP6:%.*]] = add i64 [[INDEX]], [[TMP5]]
-; CHECK-NEXT:    [[TMP7:%.*]] = shl i64 [[TMP6]], 1
-; CHECK-NEXT:    [[TMP8:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 [[TMP7]]
+; CHECK-NEXT:    [[INDEX_LCSSA:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ 8, %[[VECTOR_BODY_MULTI_COND_1]] ], [ 16, %[[VECTOR_BODY_MULTI_COND_1_1]] ], [ 24, %[[VECTOR_BODY_MULTI_COND_1_2]] ], [ 32, %[[VECTOR_BODY_MULTI_COND_1_3]] ], [ 40, %[[VECTOR_BODY_MULTI_COND_1_4]] ], [ 48, %[[VECTOR_BODY_MULTI_COND_1_5]] ], [ 56, %[[VECTOR_BODY_MULTI_COND_1_6]] ], [ 64, %[[VECTOR_BODY_MULTI_COND_1_7]] ], [ 72, %[[VECTOR_BODY_MULTI_COND_1_8]] ], [ 80, %[[VECTOR_BODY_MULTI_COND_1_9]] ], [ 88, %[[VECTOR_BODY_MULTI_COND_1_10]] ], [ 96, %[[VECTOR_BODY_MULTI_COND_1_11]] ], [ 104, %[[VECTOR_BODY_MULTI_COND_1_12]] ], [ 112, %[[VECTOR_BODY_MULTI_COND_1_13]] ], [ 120, %[[VECTOR_BODY_MULTI_COND_1_14]] ]
+; CHECK-NEXT:    [[DOTLCSSA:%.*]] = phi <8 x i1> [ [[TMP2]], %[[ENTRY]] ], [ [[TMP0]], %[[VECTOR_BODY_MULTI_COND_1]] ], [ [[TMP4]], %[[VECTOR_BODY_MULTI_COND_1_1]] ], [ [[TMP6]], %[[VECTOR_BODY_MULTI_COND_1_2]] ], [ [[TMP8]], %[[VECTOR_BODY_MULTI_COND_1_3]] ], [ [[TMP10]], %[[VECTOR_BODY_MULTI_COND_1_4]] ], [ [[TMP12]], %[[VECTOR_BODY_MULTI_COND_1_5]] ], [ [[TMP14]], %[[VECTOR_BODY_MULTI_COND_1_6]] ], [ [[TMP16]], %[[VECTOR_BODY_MULTI_COND_1_7]] ], [ [[TMP18]], %[[VECTOR_BODY_MULTI_COND_1_8]] ], [ [[TMP20]], %[[VECTOR_BODY_MULTI_COND_1_9]] ], [ [[TMP22]], %[[VECTOR_BODY_MULTI_COND_1_10]] ], [ [[TMP24]], %[[VECTOR_BODY_MULTI_COND_1_11]] ], [ [[TMP26]], %[[VECTOR_BODY_MULTI_COND_1_12]] ], [ [[TMP28]], %[[VECTOR_BODY_MULTI_COND_1_13]] ], [ [[TMP30]], %[[VECTOR_BODY_MULTI_COND_1_14]] ]
+; CHECK-NEXT:    [[TMP32:%.*]] = tail call i64 @llvm.experimental.cttz.elts.i64.v8i1(<8 x i1> [[DOTLCSSA]], i1 false)
+; CHECK-NEXT:    [[TMP33:%.*]] = add i64 [[INDEX_LCSSA]], [[TMP32]]
+; CHECK-NEXT:    [[TMP34:%.*]] = shl i64 [[TMP33]], 1
+; CHECK-NEXT:    [[TMP35:%.*]] = getelementptr i8, ptr [[FIRST_COERCE]], i64 [[TMP34]]
 ; CHECK-NEXT:    br label %[[RETURN]]
 ; CHECK:       [[RETURN]]:
-; CHECK-NEXT:    [[__FIRST_ADDR_0_LCSSA_I_I_PH:%.*]] = phi ptr [ [[TMP8]], %[[VECTOR_EARLY_EXIT]] ], [ [[COERCE_VAL_IP]], %[[MIDDLE_SPLIT]] ]
+; CHECK-NEXT:    [[__FIRST_ADDR_0_LCSSA_I_I_PH:%.*]] = phi ptr [ [[TMP35]], %[[VECTOR_EARLY_EXIT]] ], [ [[COERCE_VAL_IP]], %[[VECTOR_BODY_MULTI_COND_1_14]] ]
 ; CHECK-NEXT:    [[DOTPRE:%.*]] = ptrtoint ptr [[__FIRST_ADDR_0_LCSSA_I_I_PH]] to i64
 ; CHECK-NEXT:    ret i64 [[DOTPRE]]
 ;
@@ -153,20 +265,19 @@ define ptr @std_find_caller(ptr noundef %first, ptr noundef %last) {
 ; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[FIRST]], i64 [[OFFSET_IDX]]
 ; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]
 ; CHECK:       [[VECTOR_BODY]]:
-; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[PROL_ITER_NEXT:%.*]], %[[VECTOR_BODY]] ]
+; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY_MULTI_COND_1:.*]] ]
 ; CHECK-NEXT:    [[OFFSET_IDX1:%.*]] = shl i64 [[INDEX]], 1
 ; CHECK-NEXT:    [[NEXT_GEP1:%.*]] = getelementptr i8, ptr [[FIRST]], i64 [[OFFSET_IDX1]]
 ; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <8 x i16>, ptr [[NEXT_GEP1]], align 2
 ; CHECK-NEXT:    [[WIDE_LOAD_FR:%.*]] = freeze <8 x i16> [[WIDE_LOAD]]
-; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR]], splat (i16 1)
-; CHECK-NEXT:    [[PROL_ITER_NEXT]] = add nuw i64 [[INDEX]], 8
-; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <8 x i1> [[TMP4]] to i8
-; CHECK-NEXT:    [[TMP6:%.*]] = icmp ne i8 [[TMP5]], 0
-; CHECK-NEXT:    [[PROL_ITER_CMP_NOT:%.*]] = icmp eq i64 [[PROL_ITER_NEXT]], [[XTRAITER]]
-; CHECK-NEXT:    [[TMP8:%.*]] = or i1 [[TMP6]], [[PROL_ITER_CMP_NOT]]
-; CHECK-NEXT:    br i1 [[TMP8]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
-; CHECK:       [[MIDDLE_SPLIT]]:
-; CHECK-NEXT:    br i1 [[TMP6]], label %[[VECTOR_EARLY_EXIT:.*]], label %[[MIDDLE_BLOCK:.*]]
+; CHECK-NEXT:    [[TMP6:%.*]] = icmp eq <8 x i16> [[WIDE_LOAD_FR]], splat (i16 1)
+; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i1> [[TMP6]] to i8
+; CHECK-NEXT:    [[DOTNOT:%.*]] = icmp eq i8 [[TMP7]], 0
+; CHECK-NEXT:    br i1 [[DOTNOT]], label %[[VECTOR_BODY_MULTI_COND_1]], label %[[VECTOR_EARLY_EXIT:.*]]
+; CHECK:       [[VECTOR_BODY_MULTI_COND_1]]:
+; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 8
+; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[XTRAITER]]
+; CHECK-NEXT:    br i1 [[TMP8]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; CHECK:       [[MIDDLE_BLOCK]]:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[TMP3]], [[XTRAITER]]
 ; CHECK-NEXT:    br i1 [[CMP_N]], label %[[STD_FIND_GENERIC_IMPL_EXIT]], label %[[LOOP_HEADER_I_PREHEADER2]]
@@ -174,10 +285,10 @@ define ptr @std_find_caller(ptr noundef %first, ptr noundef %last) {
 ; CHECK-NEXT:    [[PTR_IV_I_PH:%.*]] = phi ptr [ [[FIRST]], %[[LOOP_HEADER_I_PREHEADER]] ], [ [[NEXT_GEP]], %[[MIDDLE_BLOCK]] ]
 ; CHECK-NEXT:    br label %[[LOOP_HEADER_I:.*]]
 ; CHECK:       [[VECTOR_EARLY_EXIT]]:
-; CHECK-NEXT:    [[TMP11:%.*]] = tail call i64 @llvm.experimental.cttz.elts.i64.v8i1(<8 x i1> [[TMP4]], i1 false)
-; CHECK-NEXT:    [[TMP12:%.*]] = add i64 [[INDEX]], [[TMP11]]
-; CHECK-NEXT:    [[TMP13:%.*]] = shl i64 [[TMP12]], 1
-; CHECK-NEXT:    [[TMP14:%.*]] = getelementptr i8, ptr [[FIRST]], i64 [[TMP13]]
+; CHECK-NEXT:    [[TMP9:%.*]] = tail call i64 @llvm.experimental.cttz.elts.i64.v8i1(<8 x i1> [[TMP6]], i1 false)
+; CHECK-NEXT:    [[TMP10:%.*]] = add i64 [[INDEX]], [[TMP9]]
+; CHECK-NEXT:    [[TMP11:%.*]] = shl i64 [[TMP10]], 1
+; CHECK-NEXT:    [[TMP12:%.*]] = getelementptr i8, ptr [[FIRST]], i64 [[TMP11]]
 ; CHECK-NEXT:    br label %[[STD_FIND_GENERIC_IMPL_EXIT]]
 ; CHECK:       [[LOOP_HEADER_I]]:
 ; CHECK-NEXT:    [[PTR_IV_I:%.*]] = phi ptr [ [[PTR_IV_NEXT_I:%.*]], %[[LOOP_LATCH_I:.*]] ], [ [[PTR_IV_I_PH]], %[[LOOP_HEADER_I_PREHEADER2]] ]
@@ -187,9 +298,9 @@ define ptr @std_find_caller(ptr noundef %first, ptr noundef %last) {
 ; CHECK:       [[LOOP_LATCH_I]]:
 ; CHECK-NEXT:    [[PTR_IV_NEXT_I]] = getelementptr inbounds nuw i8, ptr [[PTR_IV_I]], i64 2
 ; CHECK-NEXT:    [[EC_I:%.*]] = icmp eq ptr [[PTR_IV_NEXT_I]], [[LAST]]
-; CHECK-NEXT:    br i1 [[EC_I]], label %[[STD_FIND_GENERIC_IMPL_EXIT]], label %[[LOOP_HEADER_I]], !llvm.loop [[LOOP4:![0-9]+]]
+; CHECK-NEXT:    br i1 [[EC_I]], label %[[STD_FIND_GENERIC_IMPL_EXIT]], label %[[LOOP_HEADER_I]], !llvm.loop [[LOOP3:![0-9]+]]
 ; CHECK:       [[STD_FIND_GENERIC_IMPL_EXIT]]:
-; CHECK-NEXT:    [[RES_I:%.*]] = phi ptr [ [[FIRST]], %[[ENTRY]] ], [ [[SCEVGEP]], %[[MIDDLE_BLOCK]] ], [ [[TMP14]], %[[VECTOR_EARLY_EXIT]] ], [ [[SCEVGEP]], %[[LOOP_LATCH_I]] ], [ [[PTR_IV_I]], %[[LOOP_HEADER_I]] ]
+; CHECK-NEXT:    [[RES_I:%.*]] = phi ptr [ [[FIRST]], %[[ENTRY]] ], [ [[SCEVGEP]], %[[MIDDLE_BLOCK]] ], [ [[TMP12]], %[[VECTOR_EARLY_EXIT]] ], [ [[SCEVGEP]], %[[LOOP_LATCH_I]] ], [ [[PTR_IV_I]], %[[LOOP_HEADER_I]] ]
 ; CHECK-NEXT:    ret ptr [[RES_I]]
 ;
 entry:
@@ -229,6 +340,5 @@ declare void @llvm.assume(i1 noundef)
 ; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]}
 ; CHECK: [[META1]] = !{!"llvm.loop.isvectorized", i32 1}
 ; CHECK: [[META2]] = !{!"llvm.loop.unroll.runtime.disable"}
-; CHECK: [[LOOP3]] = distinct !{[[LOOP3]], [[META1]], [[META2]]}
-; CHECK: [[LOOP4]] = distinct !{[[LOOP4]], [[META2]], [[META1]]}
+; CHECK: [[LOOP3]] = distinct !{[[LOOP3]], [[META2]], [[META1]]}
 ;.

>From 5401d3542d287b835e4fa652d33a3a923e5e70ef Mon Sep 17 00:00:00 2001
From: Florian Hahn <flo at fhahn.com>
Date: Tue, 23 Dec 2025 13:18:50 +0000
Subject: [PATCH 2/2] !fixup simplify to BranchOnTwoConds.

---
 llvm/docs/Vectorizers.rst                     |  14 ++-
 llvm/docs/vplan-early-exit.dot                |   8 +-
 llvm/docs/vplan-early-exit.png                | Bin 76189 -> 64557 bytes
 .../Transforms/Vectorize/LoopVectorize.cpp    |   4 +-
 llvm/lib/Transforms/Vectorize/VPlan.cpp       |   8 +-
 llvm/lib/Transforms/Vectorize/VPlan.h         |  13 +-
 .../Transforms/Vectorize/VPlanAnalysis.cpp    |   2 +-
 .../Transforms/Vectorize/VPlanPatternMatch.h  |  12 +-
 .../lib/Transforms/Vectorize/VPlanRecipes.cpp |  18 +--
 .../Transforms/Vectorize/VPlanTransforms.cpp  | 119 +++++++++---------
 .../Transforms/Vectorize/VPlanTransforms.h    |  12 +-
 llvm/lib/Transforms/Vectorize/VPlanUtils.cpp  |   6 +-
 .../Transforms/Vectorize/VPlanVerifier.cpp    |  26 ++--
 .../AArch64/simple_early_exit.ll              |  12 +-
 .../AArch64/single-early-exit-interleave.ll   |   2 +-
 .../single-early-exit-interleave.ll           |  18 +--
 .../LoopVectorize/single_early_exit.ll        |  14 +--
 .../single_early_exit_live_outs.ll            |  52 ++++----
 .../single_early_exit_with_outer_loop.ll      |  10 +-
 .../uncountable-early-exit-vplan.ll           |   6 +-
 20 files changed, 172 insertions(+), 184 deletions(-)

diff --git a/llvm/docs/Vectorizers.rst b/llvm/docs/Vectorizers.rst
index 0dfa33753cdd0..b4da0273e89dc 100644
--- a/llvm/docs/Vectorizers.rst
+++ b/llvm/docs/Vectorizers.rst
@@ -404,12 +404,14 @@ Early Exit Vectorization
 
 When vectorizing a loop with a single early exit, the loop blocks following the
 early exit are predicated and the vector loop will always exit via the latch.
-If the early exit has been taken, the vector loop's successor block
-(``middle.split`` below) branches to the early exit block via an intermediate
-block (``vector.early.exit`` below). This intermediate block is responsible for
-calculating any exit values of loop-defined variables that are used in the
-early exit block. Otherwise, ``middle.block`` selects between the exit block
-from the latch or the scalar remainder loop.
+It is terminated by a BranchOnTwoConds VPInstruction, which takes both the early
+and latch exiting conditions. If the early exiting condition is true,
+BranchOnToConds exits to an intermediate block (``vector.early.exit`` below).
+This intermediate block is responsible for calculating any exit values of
+loop-defined variables that are used in the early exit block. If the latch
+exiting condition is true, exits to the ``middle.block`` which selects between
+the exit block from the latch or the scalar remainder loop. Otherwise continues
+executing in the region header.
 
 .. image:: vplan-early-exit.png
 
diff --git a/llvm/docs/vplan-early-exit.dot b/llvm/docs/vplan-early-exit.dot
index 980fc6939b6d4..baa3d303ad161 100644
--- a/llvm/docs/vplan-early-exit.dot
+++ b/llvm/docs/vplan-early-exit.dot
@@ -14,12 +14,8 @@ compound=true
       "vector.body"
     ]
   }
-  N2 -> N4 [ label="" ltail=cluster_N3]
-  N4 [label =
-    "middle.split"
-  ]
-  N4 -> N5 [ label=""]
-  N4 -> N7 [ label=""]
+  N2 -> N5 [ label="" ltail=cluster_N3]
+  N2 -> N7 [ label="" ltail=cluster_N3]
   N5 [label =
     "vector.early.exit"
   ]
diff --git a/llvm/docs/vplan-early-exit.png b/llvm/docs/vplan-early-exit.png
index 249b90c69e2b809887745ff725f7ebd074623688..e2740e51fb0c501a7e7c51874ee3eb1512125f8b 100644
GIT binary patch
literal 64557
zcmdSBcRbhs|2L}oR7!)gB_VrdL?}v<P=xGJ_Dojxs3=4tBPA+Pl0^1w*fV=%WMz+J
zWS{%1&+od<xvtxF&iP&E{Bf at H{{Hdp!`u7)dcB^{=i_l-&u5^@rSp4t)9)rBA=!ID
zURITaWP3LW$u=g^t at z2=)!PU0e>;p6&&!f*690Q%^!gDA$q|wZvS-v?V<&rDuGWq8
zZT^}t32do<RmvV#YEgW^$}5 at CsEzlEpRRQ_n^m?I<&~zWZ{w$%yL5TdHB}D?a~+p?
zC9{L#jEVTjQib!<nuB><tfPa}=ik5DtHj$~<8Q at APdMsxhsd$wyYafJW2Qj!?>}d`
zSt7Rl{ih1ai#>n;;k%X8^xt1np61;4_g~LRWa$3=(RM9PeG-zwlZ8b^j~+dWe82S*
znN8!%bL*>1n)$fpt1Ny(Bv(bm?0O4*HjA6CkhtDD<vuSzc7TM$cZ|H6#5ZjHR|V6R
z6pbr*x4`4E=GQZQC5B_%`1J(};@5fk`EBpC)$o(TtK3)KzH-_{Lh`AlWAxw4J-r1V
z|M#`~$p74B<GcU9IDJ)i{QbxOsvkxDcVw=rc6N4pEKZ91Y!vFG*1MIIl=v*q4M)Dk
zGcLSMjL)YO)AslJc<v1zo2xS=%EU-11=d6pze%)gPC9(}u!1H=mKZ|U?XO<H_VDmn
z8f`o~CZodLlB&DZl&Gk!tsV3C)#tsM+C;U5#8;CtT3`!_f%l6SFU;#>DP;6Yyo<co
zR}`Y}sDA!3;NwFkBqpYrjlrC)HcH$>@?&^uw*RZ181X>MFnoVs|H&tO;s685!|%@|
zU2fmG(-1Em|M>CahzOJG*QbB{_%S*<Iy~H(ti~ZJDVfml_{kIZ(Qhx*USBG!sNi5{
zH#0Hm=<4d~>~wQ=&9v+5t*g73s7mLhdQc^$wZFfgnVDHoP;l3-UCGJG+1c5bE?wg1
z=a-U_S{QE?wm)TQX?gA1H9R?wxuL+PPoG9dYhEaP%ErOPWx2XIC3d|#;Qsvrml=aR
zhheMMw^u%zUEIGv^Z}zJ{kq9SW at hFok43+`cYBLG#F&|17?lO#)AurnPWF}fr0Qe^
zOJbI~9w+AU7ZLipj&$SwOj5C7VPSULA{B=F`+wDm^|j!xW)dV_ru8x{8hZ*{$mmNP
zhO523y$`Z0eM=0ldn)GhtBi(*Uyt)mNKA}&ibm?s+L-2a;|i9YE$3uqOJB!((;qkx
z9vOK><thDfE2X%TZncjEhpQtG$|yY%8SBcj*3GsFlm6+vIN6C=pkHwFqDR9=^M;|2
zxKkcF+S*jwkqU`c-MPQS`aIPNZcYuHiuXxOO5)egcdC1G{KAC`%c74 at x@FwIUo$_}
zd~Yv<nVH6<f6CHy4+Eaf^6!yWE9dw3G~Q`7rWuy#x%3vg2_HFfb$w-li;JsE($>Z%
z>C!U^+b$6XhNlD6S7kAYVx+uQ7AD#qdoAtke5Sj_r$Wz%9$p_$N!$1{7&<vQ>A5rc
zazc4!80+~E`YQ=?d%r5W&yO|+(+PWTERW!c7lz^!vuwX-TerQlx3?Gc<j3q&XeJ>E
zmgScS2n^)XNPGO4R(~TOLuOjs<K^iYG^vXlW2p%U2$-Fnt!!<?Wcm6v;mn;K)YN%r
z*Y+_=bmu##Xf=pL at 7#a5aDDN6UXtU at n~U at FHchWCBq~HY)LB?t7dTI}4Go#lU7PIu
z`1*O6dF|sDHHtc~K7Bg99 at n+h=VNDW{WRr|TnK%ZMdM3 at BKNeSMV<P4-90^L&z`+6
zSympxK*sHX=OV8AwsqXs*EhqohPtJ<r{@$u|D_UhD at x4fI^D>Ggal6!K0ezoe!KFb
z6tEsKrB6soj*Oey+NM?%P}9<K7Syy~>nrxcTx@=zoum}AV=sNCWpjCFr?@$tX-$-V
z&h=*$hWBuDyO`VF>syx!ZXr3%RiQvfqN0TXZBH}w!P=><Rbnn(occaoCW#f-mTid%
z at R0fJ+*GmaFC!Wnnkj`C3<aNVHYxL4&9vU6iww-Nm{U9V9nx~$JJFuTBze=u-94ZD
zOH-2rrW at w1i@kmFm6Rx@(?Y_+cHO!5c(<YVvgt_uGns&|_x5|Zx!Lv=7vUkgpPb;)
zd_O<gDJ&tOL)!o2$1$_o$JcxE-8?)-3b(QyKYm<P^kzfcsV!T!V9oA7d~y_v3G;2Z
z>!F{Y-|Zbt(%yxMiKg|DLh0%0uP;42AmfBtq^YO+5YHHI&&_S%k(Bhn6HL)ei;@<#
z?Q+8W!Fm@@yV+<VLP0^{u{6DR&mJWOg`l7ytG?p(@z#{{!L%<{Ws8f8am~Ydjw2%U
zA%!Eq1}pH^x>jD4n9=}>iU*93q}|=!FFii?0uTDZg9rHbxuvC0d`wW#%8bt at 0~J+b
z4gJgTW0p;?Fuqor)v at A^a^A=M$X#Z7r#jLHBY8B3LciYKJAqaIi2b6TzCIrxpFcUO
zLZQ=GQ`vnQ)FB2sx|p~)sq5XjtmhwiZmus;ajSnzc+BLp*4WUX>|LJkJR$0}GT)Y}
zYaK0w at -sP5c3;@M{-o!hSuATzz$>Xb$Bk3zQU23d64jVVT-`=<RN14kpmsCAd-ra-
zw<zWOQmSrFbxE)D=H}vXO|<pq<<XvkrPdTpGCQC7(aXxp%ALK{)#IOTZ7bsw5)xAN
zz9uRxygKwqSyfGq%x)7);M1p1de;=vsVOZCqnckU)8y#%n3|j8HuWzJjgHb%Qohni
zA+wBs@<hU8(Z+V)LK%%Atx$oeU(@>tar*(kn>CN!7sj{m+&MBnH&k`d_NvRTfpcfg
z#8{-IrI)vsS5%1Ebf`pWqT1crxu3d;hn3YBD4>f?AJ<)9UEO3ahZ&lz_PRRj7$(~H
z96Lj1{cM{~)g&dlzZ3P~fdfIm=69E4+LIWZ`3phhcA2869W7z1j}=!7opx{ze)g;f
zPt3`(#JFN#-tJFbT at o|Vi?`pjj;9r`D70x~<v$g(8#m}jPaT%yi;9Xu$!jSZ#4t at w
zO({BZ3VW})iYtCJt1~h-cAj+p@#$7|Bo7(0I(I7uXCdyCCg(@*b@!=i8fobg6t3G6
z-m6nNiQJ?QUnrFYQT23po2(C(hj^_0N$2-!cqTbAJ<ad2yt+DZB0)4FEH*Z_K3>|;
zB+b{Cq|>`Rm`>u7`UwJb8Jsy3xR)gH{>k%lr0HgL^izwO5)v-c-GK)={K$<f9%N-_
z^JlDMRrk7$FlOnbswU%VqJQ5`{*tWzmP;*3DPBsS6d%8~_}$KWqbMLro>eY5*Lfm}
z+z5~IoPlPf8m=nzkhto%pT$AnKV18o)920OXVLVk3Jb!y?|L at AWX{b}<VpY6dn1M8
z3exl;W at s*0<PEj8nc3L}IoEq!`n)tN<Aj(zXFtEWoUkXhW%Mv$U%R2tF6O&?8M3Wf
zxf%PG%<7(C252U$o+C{+sS3wqrg1UQ)%}hk$EwY&j5^41$)^4NGjbyoyX{j=dr3%C
zh)2NbjIzh#m+P~+fe#C6{WXzRLM@}Eqf at -Ov6`P5FKAqjDd|s6M#F#T*wxea6D^CF
zg_GH~-<`%B*8bS%&0P5XvkqNHznc!D5EME1SV>3cN${IPjEuw#?jCw`;Su|pGiSIX
zx%v3&`uh4l8JVFX`D}PH%i>Z(86`zM|J>NNQ(XlW)wCtC0LY-~lowijcb?<@)*Rpf
zfQ~LIiF4y^sZYsS*x1<G8!rP4NdQ~>s=n6Ex$eLdLdByoTD+A_Q1EhGrSR2HzOm*N
zl(N%ZJbt6yc^~&s1}VNz3*-3Vx!7r*A3?05PQfEbj<mZ;NVv}wEe(apM0r2%4Wi;1
zGN>{1{B^FE^_Elr#01apBn<sse}6hvB^#S}<S)_lfq at JR4DRkp<P{eFhzdNGZaDMZ
zu4KJla)y){tHE(&&8<fgC3qo3toK_{QFeO&#8Uz`1_Bx at Fh(jIcbhX|E=BPIG;^NJ
za$m4=+gtYP!Xqb3fgAw}naWiE1!G&=Q%<8Q%(Ck0>Lw;8{UL(`0}q&_`Tb~xOyp~#
z_!gd~1LOl5Wu~WxX+DTJAicTvk^D<fPtQYBE;4G~hpR2`v9v$AV=8;D{rQEd((}na
zqV=^hQ&HbA%54=x*P{<kjhIbFbuah+P*qh8YNY_0C7x)L#h=-J2gBgl^Q=@X!oq6T
zHCBE;wG*}L)r;nzGnv>;#r<bxg<d83q2d8Q at _YLjxeF6--q}B8MYFC~=qkw1|9<}H
zKFu_PNX at i845CUNH!}{8w<NPR(DW6!q)qd at nxj8)<43XAYIU?g+7fA^UrtU=uNUK?
zLqmc?=N}vr)H#EZEtdnVP7DhPAyA$_Ifmb%p!th!Z=tx9lmRJobO+^yghttO=XNmz
z{Fwi6J{>}TJe<b<&?)!K*(jp3h-Hopj=olk5sKu#B4qN<poHh24~2~h=l5^B7tUH*
zRz{a`J}@*ibkSs#=E>ra^Ll0I at YMI5R;#QqZt%!s8PWaGq9m?dAxzR6H3B8I)zv!1
zp36XgWOlqcf1GdLoNj&{%72H0gTvg+Y&Y}G$qxG;pSEmM^!hXVf}919VAc#h_Mi-a
zw1k8N{R!h_miXMfyuADO at 83FWne#a0{(b9j&u_hmEcy|YRis$llVjHx7Zc-#KSKLt
zNC9CZVf{P1-|A#pZQHSjbT{$R$+QS7D)KtR_w~z{FJHg<lcOTsdZ2jp at JZJrcCTK&
zqP3RXGxd1;1tlfQ9RiQI{0|(!2rVuy-qkBOYB|WAH$8U6%-C2h-RRs|xi>mlZwpbl
zln7>{z(Ev(A{2rHl#~&1affMXPXJurezN_ae at K}PJf at DLlQ5o-VrU~}K6&aCAd8)A
za)$30hRVSlTU*- at A^owi$VfK751E-Fo}5!h9BMVSb#%G_O!sQ at JE0l5B|JP0W`0^5
z%|pfA&D|a4WAV?g!CSX(ZES3qR!3BQ|5^V`@_V-JL76 at 1-vI3r4{WTht*>1Rd-iM!
zwOo0h&=yI_g3(b6{p?D&^vYpA2gZlDhF&r-`++I<Clrn1 at 6F{o9RXjM{lL5K+`02B
zh!{+E(UtAKs<zb;TrvTF{`>(O<LldjURYgUuaT^ds at USC6{*11kkpA$_&w4Pa at n$R
z=(a!F(@BrTS`pzVclW5EZBKXS8UIiL^{y5F$#W@*d*yOUD~JTS%-V?brl6RZm;q6f
z%4La}`y?&R?wN$MA32Z4yUNv3^u^-UX-Q_;Xny^mf*Ko?bU*T?nZEsd_a2u^Jm=`_
zOeJ&DXJd^`m$x~?RMBk^2w3a}r??Cn+pzUQ5IS;v_XC~%_x3Y+gIAHiG;fHL;{#Xy
z^cY<Axw^2h at KX`XaPk3wm#&29tlPJ54=v_P#Q8mYv{*C#UcX=uzZwU)N~BnQ+$rlP
zbQizY)F>Jp`Doe9ezqK>B#h&lGXN8(WJ}>FzhUu7(5F)pQttB>EpIN%kdl$z2mYli
z05c#-U?vL0bkS1pql$05cx(IFxuZ6kn(cV_G%g*$zy#DF{q=RfwCwrw3<*svnW%&^
z{<~!Yz;2}7=PUog^Nfk<^xd)z#bZBHJwxo+_5LsZ4gy0oJm<ez5ZXp?Kmcdp!GtJY
zZ3n=afyF1suE`M9_e(=V8n}R58gb`Z#GPmI7#6RMHYWI!gI$7^JXzcT%#)Rq+s({=
z at yRRI<RHm+{{CfnEdJ!6Pyl)t6cvRHs+K=yWQ6m$V at QAZ-(#W|Qa3Uh04KT>d*X$$
z2Ll6x+u5YUa$=4 at mE8Wc3{^c^@L)@L`LcNVCvZD at 9bl~O(27EBgY at R)j~^-+&7XBo
zHNj9XC&&TB3RPFmv8HOI;O^ogB3^k^5Xc=cRfZHA!8&yp9^>OZ5Q7Ry*p(h%y?*_D
zqs7ozdw8KfAkww3cgMtRaF-I!<464hf`cQXJw~U#_><*(I&O?6gbsyuNQ2n{zP{+w
zL!tXUJF5kz3)=eDI9jaN^=vQc{{8KCO<%;t#V<aSxI#)nM<;I6aV$hm?cFp+8VFZO
zSy?k#T``)!mDNbCR9Sj`zSm=>r^Lt5qX9ih!fEuzSQFdVoh~<SJeKmxCm#UbxqkgR
zXfIbr&0s|+zLaP4gqF585ct`{!P|i%tU$>>kv#_h at mgJ^l6j|_GYv2!69Bw7-TCo6
zY5&N`YyBNB?_GQ<TBUXmM0a#%CO$0eayP~GzTzJ63jAdjI%{P)z`52(vyeTEat{tA
zSCmO%`HXg?C!F-r;Xl&kpO9dTI`2m=d2^C;+ENYAy=i#&lNe$1YCmg?|4i}f`{^_j
z8yg#3qp^{ZA9=jjqBdql(3LpV7AxoCnrC2BrjLzs&)ugEVGz4S8Ws^D0;sUDzDnaT
z?J6%HP*70Nz0}pzG&d6ObG`L#<Yhv1;S@*Fnl*Z8ZY=G!qV7FKKs|H{%&VPDo>wbB
z;HmYZwVizDUKP$ZJv}Wn(O3r5fO_^F{gn_Qn6290B`c;u>ZzjQ|MlyaUC}~Re0=<a
z)tbqkf*f28aAZ||y{MR&VWI1<AD{0y^IlmisGE)V+2D%K9Ayy^$yAP)0 at ko?PO8HX
zwOx&|C?RIl2!9Z@>G+0jijqttUPjQGLN~{}Oq0ro%&0nT>7r%l&Yyq%>ebNdLyBnD
zRJ}Y02p-hb)G`6!{6JqR00W!9r8f`K(z;@?VF3B`a&LU{-9qRtO^Nrr&zJZ1Zs3y2
zR&0o8Q6 at 8nnkr%0nUR>2vjl;0+t#gd&>#jwrFRp}n1jZb_9bo<D5=O}srW|!7d&ZC
zFRucpvAHUacvn|f^<-5xJK}odPr5l^HKDm%W$E;a<B~!D8O>u)dEA6vu(tgBIDH*j
zt`A6?KN$^B?psI|W at eisK4c>F7fnotKHu4iYJ;!X?)Li8qh@^ja0X?M*Fvi%G^op$
zFV{p15b95%+wUi0c5x{e at v$~Gli+12y(Jz?*Yn)ZkzTX5o|v4}8=?eIkhnRi1ua1N
znFJLzbsNSGfFYDlI7$1XS)LALF~AEa3~^VM4AwzIL73wiG~OGtKR(B{@7=|mnIey-
zrr~<n#MZW_*vn(;LhlNfVX^0#{Z(GcAu@@ob at 9?A7)J1efS at 3EV0>aERZg3knJof4
z@@jo}4ib0nf#*b9Dke?M*P6_VTYUQY>QZSCCFaLldHO~khlgiaxAW(TWiRpp8QojU
z?D+nDb!BCoRt2N-Cdi{llH~ajbbQ=lD8!o=X(mraZL6L6l`SmZ+%infYHDg?zZCnY
zSy|fBk(${LJu>C*D=~2xgyG=9g97^b5!N%0QP5UbSC=qKxx&}cm4_<Bp!aooR7de)
zQnR|aEGa~Cv$3;-TjCbQnVHXge~v<r`S&Y;g7sZ$>VoTo#>Pef<*KTxxe5 at AHq14w
zb4)$_950B7&|t+2BDmDdAfeo+5y<}dvDrSVwzd{@AyxaM+^WDNsL1r#*x2Z()(aW`
zRooPmL0;a;sz)4ijTl*CsG;rUONT*qIwbBOyR_)0t)*33QBkw*HQxqI?U at rwhk}Fe
zo<DpO(n_DtW)aFr{a|dIw2wE2?)mfQjFLAk3?))AeLz=w8X6j)cvfgbfo}k{mA`{3
z?+Lc-HnX&}WSC)cfteBQIIWLa55%fB*M1OFbZ_?$=;(#=B0z0necw at g6fD*t4#Z9v
z6&4l-OO+Y=thbi<Z0glqnKQMvmUJ5Z_U)U>*(48K0Cd3NymS7L-#VeVeEj%vujlQ+
zz(71n`>=x9$4{T;fZiQDc1&DcyCjfbFZYPRV{X65$X0+Sf|g7EfzmuoWxm3N3O&<X
zgu>*ld~pKI$*nzH#Nyi#Hny^d*G#2`M at JveBmfrSxjUq`p<P2sGd4C}cx(!P!T%py
ztoM_c|HX`W%7!K0>$fE&PMko8*9&!rd=sn(EhWX!1>ztJAx+a>ypR?l7z2e5D$+kY
zcN!MCAIB$iaaDD9clY-8e*XL!1CP0xn$v65m6^=n8Nz>9+S?QJ2m-X at NIgg#UfR04
z?a&~4OZ4>gGAlUf&dJDp36<V(o$AU$^XP>*gEbD7dEehxTwEN8EJ}|lbM(mQG{6R`
zKH0u~D1SHchghso*}yvW_4T1s<~xn4qSSmfzx)l*UV3%%<G;Gj2dpwi38%-$t)uw4
zbeZS$xqfqB#VwJf9RUbF_9U7;Vhg1#=UL#mPbqhrq4*Q8|B+YopEo^Jn$QqIj^AxA
z02z at o1DL=2eZ$##@4kH+`3CrS0#^ZsOWgSJ2?~<%MxsW_ at H(B_+WJx->SMJA8N46a
zf4vI>bjph<Kyyw`nQ{qSg{DRB3oA=Ac2C~obCmx2FPzC(9LD9rmkG~^Wc!U}SPFRg
zZq?%21``N0djiw0Y&-)C5<nwD<rIF)`Hb*Aj%7ghMlCwMw3ua$F)z4T)e3^(+w|A_
zIF^B4sjH(i-s}DCISBpRp>e_k86!ZiZ&+tn*Uhn}b4!b7 at 9yEsGs0*7g$5*7J+V~U
z(i899yH`-)5lH>-=MhHH-~_5MyZ|T5WDif`$I%2ZA}L?$vQAq7uB$ZTj<muzvA@}g
zPfH|!EwJV9<ttXO9dOM{eD#X5v%Im<9z~g*b4Q|~tgK%X8{VkKil at oCIvi~n!M{Zy
z7@!|t!=n$ZLK1NXmntU=0}WIqG37KDl*PZ2+x#1#Qb=)V8g|v;D%B8BdGrbTz!)i)
za5*0rYj6qtbnM%Uvu8qao2Hu^>q+naUe<1g^{pf-swf0YD-&rn^PD66cq)Yh#Pj6j
zLVX8;t6XA6r-8HaH1{xZ8Qg@^7V-Rc)K|!<36MD0`3d7JaW`@QY;W9t|J+M2Qt2Vx
zPJ9$GsJ`LHExtY1TT*|c@&bxS5ar*ec<1kLB3&*kp>aVNNRb!Br*NM7`_<ZTW-!(@
zZu|d!%4uT0Ufn9LMtlBz1qvpo7QTu^VHY8TDRe(SbEmd;W2vuu%eEa_T3VdC`-xv}
z`}<2hz%HGf>wI>OQ^ZU<O8ijijG17TRjXCwOaG=U{P4LtVHtj++_8uDs;TL5lS*<p
zAx?bw4JTD at 5~HgdTmc?v)UX~Y-(U)3c1gL;K5z0Tsf^FdbHhr8+etFJ`?947eWEqV
z)kElx%TQAy at Kax!NJs%tq5gf#wZuKM8Oa){I=DIFC%!Zn(Ar&Hb76>*7yzw(sxiZ)
z!Q)UP7J$J~0ACak!mo23{?I6ZYa$i{@r;Pq|GTA)5BOjHqprSi+CrkD1BC#1(*@`l
z%V9q$sY?DKl0<z^&oy*|neIF_l{-lnpDxby^+mA3tfV1(vBy_aUr(=_r~=d7ZkVX=
z-tjV*0vJW`@BT#g<IaAm4gekIy?6I9DqvZW?8f5yLFEi95IuDg<f=ACm_9^q%z>oP
zHQ!~%8#)lWMIsrdv;g;F#Fkkrm;?2A6Dl^oNNRcL5eB(NHVNPY0;qstabeT;f!4^l
zxap~>9;i2oWVhZ!lc!>0ijRqhGQy?L2upCw2h|;)c#iV%rGkKkGD)}f4o*&XgI8d=
z<=B32`|@P~+PgT at eJ+x(|0N5sU5QIXWFB8F69A9{AIEUa;W>|@VojmTTXpVcO{{!_
z6YnCnT=nEoj+_7WYYc4`7EM#u8k2^G2Bw<~DL at dAAzZ_50)GRke0y=n-(T?TI1CwA
zH at A>O;&Xsea)+n|azF)t<`WA!nt{iZgti%&cx`<>OVZFF->C{*yffS(<HLts&t(VL
zD32bg1zyU891D95FCdg%2ia?%98XbARA7@}B_<rrKH_7}I}rT%5yNq-qX%PzOshR%
z>46kz=D+U-0#lR-qmcQtyu6oANR~7#CMM6OGXo9PdwrpO&VqxO_z$rHXceAH{`1d2
zCZ?v)vqAIM(Q%-`yPLXP;naMur=s!=V5_L8$e$ej943o{qvLk~&!$A&4GAY7 at d+ka
zXz$;@ClCv+p8O?v3h;Ny`XU2IC at C{WX at Ou<-MQ&Er at H<=?IrYMun$lKg=nJaopwVp
zoTsFwUWCrLkM`K<X;WPw5WMBt3459MdvCR2_|o+9=1|b9ZB2(1=Yf|?%ged->51E5
zOK%kLH6k2EG&P_GUZ2dYtY>KU0B3WjXh3y{XEWb;9zri1)!!%_k&%&9l$4qH2Hc$w
zhzW?NO8zIBCh)fZE5qEaHp(7$?qRTGcurt)Kx%Y!bU-MW5r_of##|g7J<g=HtNlMV
z%LTR^EU^#ryc8ZDo^99X4fh~7Hy4rvXy$ud`f=;F`Po^56{BiiP}+ at Thb2iNFJ>Bt
z-=Ep9`xUPT5i${O7xQ#Z;34i^>6yd=@Q3>zDhi55c-`a6V=c+eiHgy4Q(1t#QGB{T
zrv|WMUMt6!mdbvOi%$aAk_o_KqC0VkdFY%{SBW1y8dD`T2Vr`Doz%tOzf;hHitV(q
z(yd$GG=k|NQ{Y)J(~%BkDdl-F!Lep%|DYQ>zcaxdfcf(c#l!Xb2rJ^yi5s7^l%-Fe
z?5?PIJ=>9v1&tX*7&ntb_5-D;Hda2hJS;3P&)(Z7ZupO`uC92*ojYfl)2`IF<4;C#
ztM1ZiFdT^9*4tbBaAbI3VD5K=w6xELUg$4?;O{A#0_Nr;g=Ka<`N!>6ac!`3eoDNp
zEiX5N<^vMex at yTSV~}|QNIaaj at Ks-Kc-%B*55})yA<P1Bzh0DR_AsaY&)wSe(n^pE
zL8&S)FQ?!5ClL>6*-g03mxN^Ww#p7yw+IW)M_6BI;)v8#_T3%6UQB2c9-jbZb07B2
zj5Nf at +ocgILz6WghI>0}%#nyN2mO)Z at o|*J-tf2<a)4+5!Z{s`acxdPXsB|S7lFP^
z=wPs7Ugb&X=<0g7x)OkXW+?~Fn|6+?)j|XYtt(tG$BQFCzGGvZU_6B!&%Sqcfr}j%
z7w?2IO_~m|@U~o>pz&RP0n4zh+qNxuSP?WxbVn0)A8I)@pH54P=1f+*LCx|*;4=#g
z3;Wj{x%S3qOc6qmGFQyfVI(J4fggCg3;IY!S=rc<64hmg7s0!F at z}1TsJrzUoj-qm
z*#eTU->!oWsgjV_=4NMa+`L)eTGQ2~Gb6n<j{qN(pNADmg5Y at V^YPh4*{xy1G%B*`
z6cP{+I9nboVyTKbixdW|$e~lPkLQ*=G&MEh_j!8ofgXeYZ?63gB_BXt$M8okEseL<
zeEs^hy}kWmxYC8`fI{F3WvS((?Cd|`9l|05vHS{vx7%>r%ZMk(t=}7#YyiK31<3?p
zsB7-Kz#n;M+l-raBX>0b2fb-;pXagkeoYXbHzuV_0Oa at _%Vs&!%Rs5Ow(X=g_zIqg
z4*E1Mj-Qab4+)zoLA6Ks!kS?__z?6J!ZBnP)GF`JJjd7M1IX}z2ZJ<XHf9}eSRpRW
zV=?%_18SKQCr&_iOu|zDXA&29B7gB>NJt2LROQpBPlM6`Hv`&(^}1x~@cGHh%X3=H
z!Zri~Hz1NH%1}ku2ESou>KWc4YeKyPU7}fXgLka__}De9&bbP-^aqDebs^d_ve8W+
z!p_2CgcSna9iRvr2_6Hu+X6_tQ+#E6`x4v^$iK0231LeoVaVdGc~8npOM__z2Ov1i
zomW<FKsU;?>1=9j{Dm3_^&X#s*XH_+4 at A;To&|$5>>h&(?)jkck$k!ut9I3p=!W8j
zm`edZfD2rQtErX;;e>*Ew7j}-5JQ}&K7|4Wbv)no*8p%dD=TYrb8|%qg9`}bOvz at P
z;+ZWZ0!K}SnMvf-5Ac}6W at 9Z8R)oI**jqqR(NJHHn*8QaA&`o{-b9$9l9EzSzO!is
zn_?7g%Hc<;5seDU%7*z)$u~dy1Lxy*2{}Jw>%6eTkUTTNr*Ulyqs7h>8q1yp)isVL
zoP6nfgop))u74`@@Tu{!F|O~r+S+6GTxupJuht&G{8 at yk^(rZex_6`VqdA^x-WSTA
z_~+~uH4ZEDV*?r~1z4EVJq0y^;H7tN--ZmyJf)_lhBcX5_oDdE0NGiy_PZ)wkwP4o
zV!vIdQ-kyif~=>H;L*#yll%sS7L}7pCi9U(?B0V);?I=&85tP|2L~BMZ8*=rxsuX`
z0Vf-a3=0#qZsVO=$%R<U;L6AebU+dWJZ^Bfe6OjIk<r~fbT9Q!U$?eiU1&GNRnwc!
z5&{Sz at rx_or{*L4ze$Jn73aJF{X|tNr=nnQC8lb5OuhIM_AhVN96;bm-0|m0x4F_%
z)6r>Qp^O#`>Ug6*yB9hi+}!5Gb;P)abZEhH3Jtr+UTUP2tc>$$n?qL%%37)>T>oe*
z;4342YNQj&Vs-5zzNnbNn{<c*3mq$Fs=)H%)_l*q`E9s>G5CRlzYqb;-h2M~{aaB{
zk>|}IjC0+0G-~#8`%RVB%3~ZP=&IF`l!97wN#c6<2}a=+fXTdqf*J!%N{RZ%0-!0r
zETpEs(f872Vo)%U20$~ZF?2+M&NpFmM~{a46VY7stDFJ1D)8zTbQ-pVgN}~B<Goj^
zaw9pZs^u{mCSdk0t`<UKB$7!HUJ{Bjr~sxPR4Zx5JfEHN$kw`54+EAp%~~y49eNx0
z^=E*w(ao^As5cDP#ld9HF0M=$%mhgq!_Y--P%!@+W)MFIMCD}om|Z{j#u+IAJY*J4
zZYo)ZYDnnU(S+u*v$7U|+2$EOv<O}2G#(JEFKr&qH*oIwaINeKtkz4 at E=j7%MAXY@
zp^osEpOeba{TROH%K0cVa$zc`&uTN?Fi~~y;gcPoyi}cEug^{P_fr5p+dajzs^Vef
z<>OoU<85%%^eo*N6eaPciC?p`- at I%CxKJ3BHF7aDM$Vo~JubtNZw8A~;bJ^G$fuJj
zA1cvmwEz!ih!nC at W8(drj*rlmC*lT&M66ogsM1!S^jgUT^phb4*F@=?5d4C^J~W<(
z(mkPhM>L{wx&yy%J)lqbijwv2-`Tw>UPV{k@=p6VWY at B1_K=1%3XmWCHL-3;kmYme
zAOichosGdtEy&Ha at DaY=oD?!v!d3P9h at S<XNUzrw*rG$dJg^fxQ8F)3s?f{Og~%mn
zr1${z#uiutfF4Kwrt_@>ygP at bov1uLkM2Xk0!SL&FkP4%u9^F;kC4>@{{oh?(AFC+
zF71gekaeq7RA-E>FU6hY>dSrp{78>Sq!Z`ItDm=u7c(o?LY_UkvvH=ZDla|#Z$u!`
zXD8b_tzd-UF9!3KhCtB>L1AG at _xU&8!o|PqB^}7~(lZYe>@(=tL6Re-;QwA;UI<&*
zEf2!Td1763*RmFILg-vF0bnuN*6oDW)pZXGtPQO(B7zb#1uX=rujbOMm~g!WCuB{~
z9jiPD_J;f##5_)2txFJ3KoDdCfGVKTO>|hJBLJ?-1fVpJH5pu2WcGWgOEyt~7Cp_u
zNJT|ON2l#N2)GG-n~WJnqX};0x|t1p0*pN3hbYaj`$*aP0qCh^atjI&wbGk8L(Qvo
zBu9gY%H3K(dTbdJDXnB9|JGpPJQga~A92_Op}jsPLnVwdq*L~=Nejtw`=rdJ&}D%>
z*~Kg<WojY#q1bnA3%)o8jZ81g3i?6Ng9lKbr$Cqd$RR1Bq$5{)!GAXuKzi2YGQ~*{
zIQXoP&3xAy%gRi#EW60u6avvqYEln591c+rKtqPDz+C#&uDBD{h<<+Mqf{RCH&=hS
zjdX3ElSay-pO0Alc7;p59(QZef6DLxnjW3dD{{XQclspEvpnkzg1Y`kgyCo3o%ajJ
zAk at Jti4-t2n4vJBKyi*(k9GC%m^hUHO<hmlb*Pe}XeacL`M)<xG?;r#-mXA at c=WKw
zky=EFNrq8^bqHHBIq*KAQ^SozM)xoS!*{F}Bw7%(kn&i32RaO;HKJs+q!h(`$Ns~U
zQ&W5bx6*TR43Wx2K!i*0kcqLeF!WnyS$X+Nl(8!&tDu4v6%}O6LkFI+AYb(64JWfK
zXcZ)UYx!g-I_`rZc&w<4d<bxyrJD-lUqPTLc=6TmrXRp8b9Zm<H!iB87#J8B%5hnT
zh-R^0SdN(((N*!r!^UY$%jRpCmsVL_5AC6ov7y{<8lv1IzG{y!HAwMpX7~-L3rK?$
z5qgi$Mt4MH;p%ij$;L_wEC;M)WHiEKV#a>_xPd3e7_C|O9K8sb<>$aahW(%%vmYuT
zfH^XdzcyB9qPx=4FgK$)+$J)#e*O(Aoj{)Rq{&-?p8mykP##*2b%22QlOxaSuk1e4
zdy3gFH8mAsQ2ukpoI?j;)i>lhM|fwBP}3|MeYx at P;8m)hv&-->GfQHrIk|=8n=;or
zACvEG0{(#|qD>G45{wm`4~_%UlrT`CQm0f^(;mC}378CInafA7*wc-mJE8 at FrlzLb
zckHNtDmH at _J<xZ`6gd0UsTWBtZ#7c8P&whz<MsE4`8;VKK70UPW-f)J_}sYssNr5_
zSq0)1ba{8%18wrW&eykUOcY)~Jz at 3(8)t5RCEt~+ at ZLivQ0N!K>mMUv!%5&DcWXIa
ztY~D8a&X|0_dI-oVWGpYEI)cJfFQ1&uvu*`v~u(y at Do5^#3WUl{a6885Qk{mIDsw-
z+7vz4m5AyO|EH$M(T^OGyEec-Sth#$A{5AR!H~gUIR32VdZT^%v at iJpK^@%IZ2O1q
z9+x2nKm<Z&FnG)Re0Im2`zdtX1SL&(2n at TJhcei=S?&xoekmLCCq!-5F+3{jCPKWZ
zpQERUAmDI_Ow%=}jtscw?W)P@(2>W`JWikf1P2_b>8y;*zQZR^7?lRVlqp32U=v#a
z%ocYZS7(-m|4zipu6^-qX=%aoneNJ(fcwCm=XQ}O6HH$7VT*r;aBTtxg<2Jg9t!($
zsVMERB~BhY_N}kaFwXT^4FmxEjNOk`$}{(-^cV{?Z5=Hw6LWJ=pPGZ$ls?th^Fzgq
z=5sLMb?CgUx6|ZE-eVckeuSC-Sa8M$_MI at 5=0FD#J{lno98LZO_2={FGc#u}6oQbv
zRQ^GzCGWx6X&WFUxMdZ%dC!%x*KC<PXQ54)u&7~)V!8#x&Vs at W5bCosZwc^;m8N;%
z(G#urJ)TJ1z;)dqv}XRWu)pcOfY8uQwEH>R51=8FlQu}1*$>F}+`E#jK6fG#l`6(Y
zlXcl=5;ewkaWclzOl0qJ*$GzGK}df)_Bo^1#{S2sEIP8NQLQ7kiM$^v^TzM^O?Xff
zr}mMMup^XpnxjkDcjy*9DD?W|$A<Ctv`rLi+NIe0sPRZ$YLfQ<{CSf|1qz%75&}^r
z;LiN~JS<|Hp8VDT;U`)O3e_MESp~~cTxvhz8yDLTmX`(|3~{LPWr0(SG%u^47BWh`
z=i|}j5PsanOn5onJ!hfuuoFQ=Z at 8I)+<Z at 9U6KzVS0d196oWoe%}}zrQE=;Q6$Q7(
zJ5EEM2u>&|)!vuz=s1=Z+rFYJz;kBt<MiLz3Oy81iKOfY>I}d*qy`8pN~HE6Jb)i!
z$k?Aa(J}iO7Bm<wwSWPyA5?)({K|1-(+ZD^paVaCJdBJaRC%;pTB(G;Oa7mK2r^A%
z#wshxW%ke>`vJO#TETb4oMYm1Z7mUkmk9vVv<hu$MWieI`^32Gft#1QW;Bsh5Xx10
zX5sRYsQJVYffl=6BpBQtIu16rVW?m-0pLi5xq<^^rKNVU8S#%`SJbE!=OPaZ;Kj-8
zhg1TT{CQf)bBO><oY@!xSy|b&wciayPbOy(5`u$_<#974IJm__DNAQ+WMm0bXE!q(
zPxNyebMxqwizs5qWiDchK~(WXT-)JS*?l93^ynK;uz?|%qu29y9jX?To!0mIx?@ej
zgG4BZ1H_#{H_mTre7p;^bYS0iv;nxkyP3WJ^xs2x%UE5<4<tqNjmjBPK}4R=eqyf5
zH6IfeW;k{gwFHgF?T&B{LI^4bIhC4*&BsvR{)`~d%GPC@?Iecf-O-`N>=z$T(AJ>u
z(0|$f8~y8|=pev1bWjvz@#UpJusw(zh-vF~+h=5Cpn3A{Bpfs=D=X#@^n_t4R+#`S
zGX at oJsiDBP5PF0L9>aPtM at h`|nE>E2$8gIXDw+R-{EZ(ucjP#lLYHJ#--Je*L2BOz
zY&MBtMXmvew?)2;TF&Ec3$|PArQ={`?ti2#CGNeJ`(P at ICisw)XU9V~G6(b{w?7fR
zX=vN8va+(sU&8A_03wtEgTfv^hyt}Ry0JCPZ30TgUZ!dc^O!WpoUAA!YSIkoqL-AE
zTD&BtzFhF|SpD<I_0;aDp~Z4hQBn6$2*ZGtpgUtg^8ngtR9zudh8|N{M9K$Br^L;M
z%1UI at b0(qTp4TtlhFKxqbx;BT?yA=E<~{qfF+gGa4xLb8s8D~e=LQ4{xF|<gNEs9u
z7{+u5^vBS{9L?O1{K{K(!K2F15g&Q(-MN?EMBX1NSNm{HFI?En^F~0kGb?p$Y1s#5
zAhDgPAW|<5L?nMg%rZ=BeO^uc9GLt4r*EOvRG(B&RAoHnu3iF5X8vE2Q>8-qdZ5r<
zuIHj>C5|6=hIyZHA215HasP@{Z}l$V=cMzT+X_!c>^6N>Sy_pNVX-X$h!Th~wbB4P
zk-GR!dU|>`H8(rQVuuoThv?sog$#BrYtyHEw<#tAwo1G>bqIMMRfAlU2o}YU1jXFp
z2q*!eL_(sAkk9&OX6!0I;747w*I_>A`&`Nd21A|lC&#jHNnFQl9^U*eDJ~9E`Au#!
zpJ8$LmoGBZYd|OCy at a?a6M!y{4nkvHj;9+3LS1Qwy(nFN)*vnUCE-XN66*Nm37C>b
ztx*SGfP91Bx=Pq`CNx?g6!3c8<rOS>?BCeFuzTM=5bm}OM%{PP7R$uuLe9S$Bqu|)
zJOUE!W^6J6s0lPp0O1vcCX-d-3Bpfp{T{#daCfhse#D{NHe(c|7fe;ntDCK~$}&Io
zeF?MfZu_Flx45u*>@Bbmp?6cy_V+&red!jfA*80m8hn0lV5mUKaGv~w?u(9EQC=>$
zIE8fe14g*(!c$LAKyU*&(RZKf{8;h*yY3>kvk6Q;p;?|%ClxfUrerLLm2iFw!Ba?P
zHyIgE#yUKnEc2^bHl1 at I7Uym*!+RKh%fwuYy)#a{ykLFq!eCI<V-9zPtg_q at T<TK#
z2p0nclomP?h8lsrbbQ`+GHPO at QCEZp={0PFn(Rn7I#u9F?3kl`(PSaA^^;;hCVD(9
z0f6ww!W74fFj+U}o0Spu_Q!3)H@;aB6N_-<Y6X+eWN(q=$&-4dml65JL$vlGbAi>f
zun?(xU?@B`wh-kL^t_6R329^a?D!}$<`wi9wC@*Z?^S2**uIO5OcJ^hcDEFVB2T%7
zIZG(uqbgUh<Id2~a4Jc3JL&?Vt|7NMw>%OLJeEIOE)av65{uLwnmE=G(c$qWA~$}V
zcH79gMTF(BcMg5IlIg#TQw>5Y`QPJIU25O&?V&q>-Azls_`>B9Vo;(Gry7=y0Fl$p
zy>Shtjo>rUn?p8O-)=~uU at BYGI664!U`OK3yju?-KY{zz{N)Vj7AU9fxII1FjE^4?
z8bJlfhd+g at sVFV2Tm>FMY)BmdjKv(;<H_$iGoYz{<jDHqE)ENu1)o&qdmS7cjQ`@-
z&X6q-{D#@-$iJ1l8v-W~ohy)zo?6YHT%gu2Hmc=}>}=d@(W2i^)pMyDGuTXnJWE%o
zhC!d_?~4G%P^sgkymnh5Cf|dq8S8P0s$K+j at -+hxE{fF5=;)iG+cR+U5w?2hL%#dk
zf0MB)b2Zv7ub|*?<HiTX=XK$vU!^BZ<Aex5AszUY1@^}LKm!pRrj$bkGsVsPbd{Fi
z(E$DaPLqH+7;7?j5y<ORRa`tgDGw=vS|HK at v{7~{rD}|<jBf;WWLm1d|E(c&_H4*P
zs|2>74U`6=2CLNze1#JYw+t_AfdTPUR#GBhI9~M+z}OHnnt>Z>Z{7_Uiar9=o3#{y
ztz&RwkSzqgQczL~4h=1VS12QMJNpbcF_8$RV3iwU;HBn5)vBrCL0D)5#pNp at vAol6
z{_=$dF?77x+1W7z&7+}r>_NE#*L7>)<&ift`w8a&f>Xl!@gGnKm*(f4oSfdNy!Zmy
z4wIAt)*SW~En5J~6|an^cy6jwzXD`}MbcR0Wq@%;dGA{HQV4zc at L{Z`HT{?F?vwod
z^^J{}D;C*Z2bHAtdsXB}e_;}0z;|rlPGm<Vi#34#F`=hNMn-=AOzKmsxlbrqd&=5I
zNseVV-B=EPU{)Wijqkj at VL<GuMEm$XMOa~Y+SDyXX(eP(6N4<B9&Bt_FXmQ6@{I`F
zRuys!1QPkH`;q_0{FRTskN`HsV3FRvdzW6Q2iKCM9M9j7z at -PvQ}lYbR`=A^IXvGr
z2x?i;dQ_#|-G$g^0k-3?lj#(4k!K2$)z099%R`wAE87ll*M_3J7$kg(7$DRkxjf#+
zQSfDa=^kZ$a8B%#S;kEdP^-Kore}@YvZ}#<WU%_b|C_<uTXIOqP_OtO5|w{=(7VrD
z>T+$1c=MkQR;9P`obq1#gP8(-1iVA>FKxsEB5G8TPhM_rA=FK|7)1qn`9Ihjo(ALx
zJcD1Ja-IFu*4BnU!>hUZBT=Drvyu2J>_1547tx>b3pA%o^75|pqln=@16%^+hC2nN
z9#)shAKqgUfY at we`o%n^N}-YeRiy*6{zP^UqdCj%LA4}FxU>iZ9r{o0fG3P1;`QHe
zbUyYB?V=zrPkVC$Rh(Sr=+UEEBmLv!^oI_;b1FiZhKO$=T3rtv8AUhtmjFDInTE<i
z_y_xT?Yf+;17;cF-?SZX`a#8zNuTpyvH(J$xM)DIu&hO%e9>)#=7#E)l#J{MAvz*#
z?gU}_q**O(VhRy-`7y_aAL6zB|Lj`vyZ>MBpeIWtBk?_u2}J>Dfg8c82vtIe{P^+T
zK#e~1SOYWI#l6|KPZ7E~&4nH=L_B^3=eGSA7J~+i^7Z!*S)kYWz}qFVIkRsO%$l9E
z?#vhl&L^Tf3SpsAD*>1&BxP{%|31|J<<m6(gHs#+C+7ig1hJPQf*+Au;Fw%&Ypj>7
ziR2OUT5(EL;JyNU38gwRA|m4VB{8ua=tn$P4j|`phCnpFo5m>H00FhmuM-kjUjzdl
zd;+o=%Kr$ANC at T6b8|frM_prraD^OgQqz?P0}$zV>dE26Aoxaa!8$xm2N|cgw-+X<
zN<R5e8`1zcBB0g>{7zvkNFf@@7B&tJYr}t2HWc{w%l3#7o~Fau1#|Qd|7&LE;nT##
z#KLQ4<v#sGup%<kLKPBKvuQEb0|V{6B)&q2r92-`5GjvYg})g`{Odn?6vmCCqSzw=
zpYGtHL!KLJ%cZ5IuU;K>badRgb0^lSfIu1~Z)Aw+yvm{YpdCR8=ElxsSm~^+Us2lX
z>+7*G9pVS}F9?hZezMAvIC=6U>IT{%QkBP#x8hAe_GM)_`QSBnmaxC)zz$*rj8P4g
z<4)Sc2%4MY4s`iA1o)23xHJn3i>T-#`v1?LKXEnzz5pBh-G0}J)z#I791jcZ%SEsk
znH?k!@B)1>|NDZ_1el_uHCuo^P{-)K(@A{0|Gz%LU;^j}G#H}8lf^hFAXN;QBbgZ)
z+!@Cr6<T2>+Z8V-VH%dXN^L4!yomc8gM*Gx%AD;nY+$6JiH72{pFy;?_FV_h1z<Et
zOS#xRmC`z{w?9=Y{Uv5&-ZVg?8RR?A3pG{MOqZ^X4unyh!J|M}%lJN(A_xn)I34I0
zZGG6w>GSRF2-Bcs#KRo6PAf92lx15lAI6rn4e%*%Jn8N0fxxNmu%tLHK2Zn08Q6E2
zit4z-P^G8gdjJD|oy<3gbox8RL%D$Du>z>6xAeWE16n#LVrK3FmVoM+Z9hx}?Rrl#
zm!g-vabixaglghP4rtH!9|s<6z{CH)JMh45v!EFB4&a@;O}K7&Gu<WL{<7Z8=4 at JG
z;G2LWWp8|U2L;KU`_O*%Ysc-!rPLx(N3%OvZXbF1oPBX?dB?#JIZBUnlYB;J1ZBy$
zQ*PrV4Tv!9EMkgXmGtqBFl7)X^X%R4+3!%DCHZx-_PBZd1!ZN#YB(Di8IH`3y^eo^
zGd)HdYioH$L_}Cw at 96IW1yH>-h*cfr`Ic%odR~7jA^ReM%68ihgAF7<H94tZvKMAF
z!U%~rG{70W0za`ts06qo6)=Qam=JT-l7NaF94WJ+JXMhD0xO%E!aate(P7%_eFCik
zR=_66>-fCDFezj<fby^8SsxZX#33Zq1S#6}j*Z1*Y<3I at x%jK_1rFNK(xTN2Gu?#^
zs>3-Y811?26BKnZ!sjpbynM+5Mj_scV+qnGS50-fv6rATsP&4D4n6iR(d}X+B_V0y
zrA2UAB^)78$VnK*qty2UN8y`I_CG_ncQEbBv6IFoOraDoldjL7Z!vJOhRN?^l2Ver
zh*LXSQ)nn4)BS)d7s2!up8(Vs7ay-IyRx!^r-F*&2r7`3WlBe$uC)fdhDu0aY6Ko+
zDJdxW2L>FFeS{<TcJ at 88{gAV$nV6Ji0ekV+4A_xNZ0nQ06%K?H5#a=;0KX~;uh*}k
z5_X|7gzUX=@nU5221xV5!ovN~hzkk|`EI}2DfS*Z at uAe;#SPcL3Ea)IP<- at 2)jREv
zXrAR81W<(`1EAj0))vLX`lyP9m6h0>a^S!mN)QSR>?73py5?rJUk~o?XDWtUivg`P
z5n8N91`O5l%1bSfgx9Y};D>bjJd2IRJ6cn9#o)t3iojCg{7Vb+?fQzbB_n9hk%1U>
zZaCVD5H&h|pzDZOHXTI^LS)|FbYO50`%bYBI2N5LJbYk!`Y<Ks(C~1g`uRfJ6U2sB
z>9yHytM{>o;VCwaBV!R1T2)<FR|HRu2nWL5gAfcJb1`1()QJ;XztY8#=y!8-!&5Ta
z=?6H!F!eop{Vn!G;kiCi(>#BE1R5B!gf_2~aB>Z}cpwps#^s at QnUBSCp_i!d-OAxl
za at z5jYLZB+Ty+Fdn^=U79drHtGh}xw_BeF@()e|(EzPijF%fiS83$!74<k!BFf>$J
z%|J_wEz6fXk6__^nf^L4I?8KM2t!HNdl?WOT;@OwrKz;}^dlk at l(B_Jo+S*sc+(Bw
zniG~GPMwKB@?>#gVR%jjoLcp at 3;(vVkcd3*bqTSDrS<g$>t=g9G&FQ$R{^NBvwQpV
z0ajBep~w+|aVS(6>KPdH!gbDL)<;ArXsPn|-BqXo+GQYa*cWk$m%4__6Au<5?uWTP
zuO;L^!h~WWzr<o|U@(r4hzxr45jGk1C!{gdt<T&I6H2`L3bAg|trzHg$G2UGX%Y#K
za9jH$Sg-+#cKL+_17kCIVPWCPbJh3!{nI^WK!xT6-0we9NbLSffk_K at MCIfckeT!p
z1uw64a3pR6L2mB1e}s8;9!JE8JF-u_#E}I^5AAM4TF2<lj=cf$M-TYlz5BM?Bk)x%
zmRD|=0CE0GT^(QA0A%@=Zp-8M6{`_NP5%SB7Z(+kB;Nx7(~@Qw-%41ww@=OG^`p;!
z6*`Xsg9NAgD+M%HKtydnNat5Xxf~&yYPg^|?AGAoM;;80fow~jqdC=E$A=MITP^^3
zlK&GfMAEu5Tqx1<C>PdB$Dw?P8WE1n`bprhJdxkr7RITbvY$PA0K`|m^F$tpY;0`o
zP$)0wgPt6YmoU6|z8gC^iHPN;WwV)LeN}W33X!zupXcg5sBh^@Fk037<rC*_T!=v`
z2ttP6x{ZZJE>1IQrKjAjSbd{m?1Z>D*TTIU*ujMXq__-&km>>rZVp;whf@#YPM57L
zR4-p{#C|&MSl-tOuBviLy;oy?{J7dSgXtZas(UD0i0uf99m#DK>o7#y>5cGUWapu~
zA+x8S90XH^g#~ee=@<K#A=pcMugS~8lOr~Jh+cZ%2ELB7CSJ-%qLZb&DaSs027~pb
zO(+2cZ+IU%GxYOk24y6yR|F!5c*(9LK^b;}`oa>%DJJHEoj_JQ1}7#8jLLSi0K+$;
zY#^8P#_Z1RtHL``#1Bc{RI2AKOGMU|?<n at C&dtps$2?5))9ou-KDOD?$Yugd;OX)7
zhCO&tAMdkK6*Ukge^g=n1z8Lw+e>T at g0#YUCH=#P8&IQUTV9;qc|8;E5{bILJm9Um
z4R$UPO43V=Ugd^Zh_ydF<c^?|xI at IlmAQEv%%<305?LWh9&XkHfs4~U*0#16Ws%lX
zJE{(GO#_o7ge6Sg{}KQ~skh3wOi_ky$A?>WS%uh1wRnru8pj*(_BlZ%gtwS-P)Sww
z0EP4Dw|*$**f23J!j=m=K+Lj9wo?c39HWL`#F=Vk93K234SPAL?_+6Pl*O`u<&v4f
z81wk?JN*I;f6~A=aPn<FDBZYm!%fjE+7hyfjf;^_9)WjTnThr#7$!dtyX(MZC8b)J
zR#fkZW0!8<-pcYs*!%&@a3?RVY-tj;M#zg7{eWKqD9tMn4(G^l$^azTkbv?BjNeha
zTiqvNL!sQD0ze>7&>@Sw2H#T_2gSUp{}6$&!=gzw?xi)@9A~JYMH{Q#QrCxOs^T`X
zXV0FaEXnHCr?NHJrNp}NImi~Cm$f<cXgB)D^yK6_9eq))pTJ*1`=i3-k78yKpL+t<
zQtJvqoKtV3y7<aq521yXm4a+pv|RXEUh0qMMUi8D|HG6)w-XRgtM2syC?pNuxlUu@
zYvE8OjHPcR=&K*3qKb at -eRqoP9_9!@H$@}7HA=(uT#@YFV-&!J3cn~+6TOy)qd_hC
zi!Gd}aH`km)TCGMfX$EFc0~k0q182 at ixWGfNCMz*e?L0e_o80nZ73=G86_eDvak14
zJDjB=HlrF8dt$~#@m{voW59J=FdT(nKxt%RA_9`dl8;TJaEW+$H*qoswh at t2Fc_&Z
z$0$)VGG3I0%w{FEvjw&rIw(aWa at RxAh3*U7tDm7~Jv(gO`WBJ8mzT(%AWr?+`^V2?
z8g$mo;^HxEWa`3*lSDew>G<m==^Tf9&HNJ5>xVH*g+aHk=`T!pxg+hH*WaE_{w#Fv
z+&P=a!N`hWQ&jac>^AV#NZvOR0NVB#K|3IADCE!qiNkc3{W~d3z*KfinLZ2)V+Qo$
z1VzDOv%0&ovF^cwS{Y?HS+cpoiqkrTk(E2{(ZW3$GBG}m9ei&()v<juPZTk&<m)C^
z^iY~wlj}wA$+A>cR$f)yjQBKix2B=Nd{z1>zk(?QAj&}5w|ieXAkL1EJ0L!xOke$c
zTS)p~J&36GZA&<D<9k?f#s4uGUJ~0j(C>*;+E7W5H4=gBpEiVw3RZAl7Lu&WjR0A9
zcZpSITptb;Vcp_r8+DIwOUln<bbJv{o+!wo?2j83IE-<NPA9WBx3-!p&n5 at 29)tK<
zqjY*Uum8ZogWBxp>VjVZFeE2i`ukW9LwXy-<$(*}T&@D>@N+>I5>-XHLJ^Os-me7z
z)0bLCbqC4mU09dc-tGf83_HBx8 at iQ2>XVm6HI9KDahuOEx&T}b(&6~M>a7nAefdgk
z5d#UE&OCqZ8Z*V%#6(ITWjm?$M|MO~)r2)w`>FdKzouWv4U}K!sA<{NftgrWHwA2m
zXRQ6<>KQkmV31_6P}!lWsZ<DN4%jwH^4#_z%o>&3*xiBB02z+ at z<~@LZiYq?$^RP!
z2?rODHv(fbh*&(oS_8}uoP8j$w6QU)PP+OIKqvOv@(7)~)cU1d>Vy4hD<fmEfXeD>
zh4r?#nMjgAmBfdnbZ^Z$SIrRnW#sP1tSml?NGlVe7*%VX=$|t)K0j;eM78eL(W~W?
zWlO0;1<bQ7#B+M?{z<rsgrpia0Y3#6!x|8XDK+W7eW=?kVHN;eL1H`y0z0k@;CbH<
z3KF5PEbBO^g;NC^YH9{wpZESSF^dbpY)$EGfwLWyqy3fb=+QTZ&rZ##nQf60i%m}#
zWQcnC^Qrs#O4bvf4>lk6P}p{6u(7fxINbu4NEZ*J5irm at Wfn~61pCm(Nvi3jJOSbA
z0xb|cOZ34xf;kATu+WQGJj{3$nQ`SR3Y-g?&_!7tK~Xzv<d2Ut at HV45E`9|PYOx8*
zQYrEFIzEz{dKi0VpI=%4Gd*}2IKA3qPteHT3U(3=M+4jA(g*MIeVs=x0KRI}#uSiP
zU}aa=3bJCCO9(aU8#mFDIH5M+G!$`JN-C<d)E_mSB|g$m=hQw&ez*?-ns&7x6w~Tn
zGWqr6eSjLjn^~o?ot2lDHvsYTv*VfA8&LJW17P}9Sm33%`7lA=>Maosfd5S0 at 4Lpr
zKYQ_cTwE81ixFQ`e_w;x(zQFL#CbbLA8KKwKtYk01w8E7g~58uL=>_JQQ&gXkL4I~
z#kHVRKbQa$L`(c`gY-zpcp<6|Jc4%FS5%|e!hpw5f%eS8!*l=M;pG<z30RV}EI~MB
z<Jk!{Z1Ev~N|slh>H^SYQ0NNMmE3tQfq-Lj1#hmx0+u~`AP`CA`*YQ^h5f{l6&Bd<
zP}QMAN!5)Nk8sx8R=!&dylMk)z8G0UrpK0~<4sVENGz!SUMp<!BJddUMob at 2y}Wkp
z>#8l^iUo82=mD<p at 8aTm;iw043JW{pyb+v|^MowVX2*^lHnI(nnP5G=zN7{>7qk{r
zOtUa3ER16HmcF!gRA}gaUC(hicIs1)5T_?jOQaB&lq3$@`ugii5_keOGU9ZMFP)uv
zpdC<o^W1(XCD9wg0`vAR&d7qv<b`v4SYT<S4M~%hkK83r<+*onCj}hLdm(a{6)s;6
zd*XAv3^Mu$L0Mog_sxw{9)yqKv$-xt5h<2>0{5xzOw5uuMlewF^Yevbf>XWgKEz+V
zc#%Wt at pB!*gF;4(gyNLj+z<|my29}VaFQ#7vlbuI>GT?e8|P8Iv+~j}a?gS~j{-Ws
zw4_<6fulq^_5=K at r5cK3byM@}$;(2OiaB=ewi3JA+ZCV}oFIvVBm at ow;+#DiDpea9
z<X)Fx<zRJG6rpG~V}L3`nXF%VQ7zUYq68x|S>5XD)lcO$m7jm#{k^m#CMt?$j?{zd
zO^QTB62~BYDO^cDM$3ZZaenTo!QL=(9PQHz8Q^%w-$C6^466DyW8<%JUpfk01PW5u
z(TkuHA85pz@&u1?V^<CNQ=fT&Ttv&cIXP9b{h{5#p&~FBEIuk~s6QLvyPa7Rm at HRZ
z%}lV$;fUGjUla9}KLcY70t4I24<C-1wx_uvO9(<e6b%A%jqW{`4<Q2u`GkXl5Px$y
z4sy at JSo8Vhj(?6uD%2b*K#MFYENrnU#Azyc_(xuD+qn<>=M+C*jKYB*uCqUoP6!Ra
z0<*ERGrUG6C8mc;gH{~KDJW<U_!%TUl?CY=AeVwTAq#uysNS(LiD{VuSV9F14G6gE
z=q;c}XniWI`j`N|ZDCtZJAa-|M%+(%^mHca)5}JPqDD5J$dPM;O>H7Xr^~IYtSo?4
zUKfQm&}q~v3rW#spmf)E9_%luZfFQq+yym2<#SM3g#ga2Vnd${)4|?D9Ku1Cl9-ZG
zfL#dN3kGj2Z30iFTqO?EdvHiR+%yc6n6G3Og(vU$2f`R*V9>p`igI<$vF<=4Bn+zH
zw at Td!w#e?Ny=J6x=S{^^;TEeAeS~8lQB^>`weCP5#ql_EJaV$KH+WQiAg=x8qJwv{
zu|vNv-&xVSA7bWvPrMnBALvAmKuHSDI!Oe+iCSM<(^9R%HcJ4<@f<xJjAkGwPH+{X
zPYcpA>#VGlA3cpeW7e3$X$fj$3J{`;T8vOm0l+$TY$B_7KcKs(r*m|_GfuR?Nnu15
z7~kd&-4{F%#WNEs0_4b;Cr_gInP_NSFcuK^CJ+o%O^zr!0rltML-Oq&^YH2AkK){z
zhgBxf)=%IJ9~Bi9d=icTF)&&%icx}-`3Mp%=+rv!@8mf+xX{1S8}}+`1M2{_z~w at r
zVZvb;<m5kaHpt6hSr!O3#EBh<G$C^Ex%><{HdJc+vr=N8$$NvM6=Wv5A$5ZHpvVwg
zF_FP0P7`@)a^}ou07!4-iLSr<hLWeKJfs%~83b1_uzxQFML{|1OLTr5NmiA7-NK?H
z%~1OK8H-2|ue3tL^yFl!h{#Ci$qvEm*<*N&i+4Z{Knk#3mI+6XprK1j77%+C;NO)>
z2|TJo+5Qcg>juw3sB8B^crKIMF+5mCylc<iy*}6}hAqILl0JagnDRK5mH*egnw8Z!
zdIvU!b?&w%!qoNy|A^fk26e;E3u9?)CVN0Dc>5IXn+OPRd+3CQAim)0%+C7#Y=}>*
zuO!^PZw at Rm;mX$AeA{qNT3&p7A07r^8IKch*8p@|Z1nzt at On#ZeBw#sz_|3n8mJpB
zC7EXb8*gs{jdkDld!L$<B1NSrN at XY|8Ym=9G>B7411S~FgGiFAOJ%AM6%8aZg$B(<
zSEFb^i6)g&Xe3ER-p`NweulN*{jR;&+V8fW_1s;C^ZcK`;TXQh_xK*PladQyv{nv&
zU at j0fzE8k;CNuL7Pyv}A?992&gXN&50t;QZbV=vg8>Bb;Pd`j*d+&-3#*>c1kw!*f
zp>b3qh+bfNP*<7z7gP##46YKhmEG0>yP`$wyo>LgGj1qwEL*tnXhK4_-r_4dB&1L1
zq`+C|tv)92!du;2`F++TUF8Rn!`_n~lx0?{j9B>*>xmOuzPz6G1EQek*Lc8y9Sx)$
z7dg(hZpyo9 at Iwn_c2#ver4^neadi*JYY_S!-qi@*kujU5P3%m0f}BcoJ_44DrvLE2
z>AY&y7wpWM=q1<- at oX+G5z*0&{Q8S4oAzz$l%1Einl?ufL%+WA^~CGIXB<IV#?B|i
z6LxnQZo3wYfiM}cTdhZrJAb;5*FXU18{rtKp1(lLaJIVnPf?Ie at SK@(o<$X<rH18;
z7w-)TLAq*QVM(Yr;Wsg<)uc)AA(Db?Qw~z~h4tFKM-RJOkKVAqWs0lAJ4u!*t2t_?
z+Vpk|yR!(|%+1^FV9GDO97MK8i`m5+t0VL&Zey#{uI<o!YXw+cUG1FvGP{VLQxay&
zev02;E~H0rYwHf$y*kCDq&&lzgR%t&%PDz at _HsN%na2Vrry-DwA3c(~^lYSy?)-rJ
zQfu~^ZKt%PR5DAb*bW>s{}^Up)+Fo}W%(mDZ}o5*H*@`V?8uGI0FK&;s3cO5_dKLY
zJ=6TabD{j*d7?C4V+O<#r1OG`oOkOf6#=!1aI9CGA3jfBow3|{d!OaiH&)bz+XaWq
zB$@y!X5^@8T|dBu1+Y3uMFHTEV*p-SSXgKXG71Iq)TzpX_}nGYn;(N^j9)t<5Pab}
z5CQ>mBcF)11QUClmv at 2_yrJ>Ut5;W355;M5M)^>IJ9loToCjlz<l-Jse$yAg6o{(;
zYDevUKM=1}MU(~42(HMKsZ;Oe<hT`|ID+}+;BlRdXbQzx?YyiigCfu1IcGmo@%Cx_
zvl;Y)?!l}@cNE7fuFyt#`x)EM=cS0l*Lrt%I>#5$ul4TTa46Lf&6Xwi#Tmi|A$}lt
z<9;+!YTUaC5!BD<?V at S@Fm`;0sqWIlK+}gutvfarUF7!dX^V|`)B*6-H<Zx5PdfsH
zWTFJil;Hq#iRzzUX1xTf(?Hyp4m{T~cfYtP?M1}o+vfx&KK}QteWv%Q&OLhe<jPGf
zx93|i1p+eRf0bfmV==j7Ex=2Y+e|MY1UB0yGAWFX?DEC<rVnKQvzq?MS6;j-;O7 at 2
zO~79D*dD_cCuWT_;(OAjcjRY!Lxx!Q-$P{qIVQ*EKYM at cn)$!E00aK at 61vp+h~6z~
z;2%dGIM6{=KvZ8_38YaX`3q)0XK~!P>j+cHsv^!J`8siWx%iPJISag(bQlF;Ywd`=
ze^!hgEAzVu0RKwt(W7tPzC}KHhTK7(Kk-)c$4Fc+1dCCOt=A`XbXl^W{!v;l>rOu~
zNqL*cE1C^yekSQf^>N#Kk(HCL03QT~7Znx?DN6Egm$o8vY9aDnv33=emAm-pP$tdW
zibUO^RTmUWn!nmfnm>d1FPSE!vFZDLBqFS9{%YkbAmpYmUrF;rivLiMh|H|{tA$z9
zTZ#WLlX#gUgJNBQBgAM7T;G*9>}Sg2Du^G8BOv3`2(=IVvV5TUmPGPL1d%aDAE2Vr
z=9 at QzTp@{_lvU*^&310*?WIeEgXWL)#OsMKm#Y?8&Hv(){@1r}ULEnH{~tcv|K!EX
z+e18FY7cr(6uxa2j~$~;b*`IHD>gQOHA`G+-t^@sekQ)OSyZ#{7&oUyi~6naYOR{R
z=oCEB01I;qYA~Si<`Y|4w>fElx7J4J7j53GsyaHnV`Z{!!md1ZR^^@sR at eMCuk=)7
z%$NqzT at 1%;{`|v}`l(RFN4nMliN5u7B`$Dbp`SfuJx#pp%q)nJv+Ap at Fcf~f#7Q-q
z(e#-*&j4a44ud8g84)pF{2E^UGlbr}H8Rpy#6dvFFX)UWQ$m~@%AJ!_4A=@k<wc}&
z?5l4S1&S|lJs&*KGc=6w2Lq%c^aw82kvA=@ukmuCwu at d_fJJP2dSl@%NAM*~?qc)X
zt$B?;^5Q%h?z7MsMG+t?s}U<0kWC#539jqc$CaO#Na=7B+Ss7lR`E71TehT-j at 5@e
z+g`Ps_$W`r=}Zh*q(6J<((*7(E2N_X=!%_5u1F|)Tbg9u5gE$1ty)38-tQ0RaTxI+
zta{8PkH{+wY%e~C%7D?My#c>*EPZ0Z{lNAYQO5J~vfnMA96^Xn^AjX`1vJnqcz)s@
z$MpGQnqQ%AOVcxqB at QTi^JX2r%^Fze*Z4U2s(&k`A5rNbFaM*qHj~Baj3vP<^!`1X
zw_e(mNV)ly%CBc&ga?|`JT<12#ksnJ at DS5Nf3Ckj=?7|7LyW|g%#aaFRyemRX*%?M
zIzNbO7J^c-?U%zWMS+VXDIh4QuSVOpJ3!+Xs%i393d&7?H8WuRRv_^Vw9#pjw_tr+
z+1lF+J{<!3gg4g$7xK$}41^&_J_5`Qc|@c<KY#w at gc9!)xxhW<`C^oAI9E{*t*@`A
z1{ILVNr5BBE_E{!#FoT0O-nL!?b@}3M=B`F9y&Djzn??158gD1fZ2m%=iI&9PXh^2
z`YK^dG_9(yim<f4ZW<#-{D70)K~~n%%BpWH`9Q1It-pVMF^7lGaF{UR7MsNx{y~Od
zt_HV4QnwA;VHR=w*d2R%mdKI(vw`P|iacOL^5E7kmw}N8nQlhcb&!+GICt(}PyDXw
ziLVuJ)n^mfq5-kItR8?KQ3<t#@;piMVPa>_V(GetzkmKTq*Bf^aP6N8qZ^YfD=!bM
z at EY&x4}wIy{d-b<Vgx0l!M at 3#uw at -(Wt~&9sW^Iid9`WP3Vm(arZX%ZC$6J(3^8R5
zr)0w?m4BU*Mu3gu^hb*8*qd7c{gk3^|5%6-cMpzwn46o64n^}bIE)p~pnZW-6l4n^
zBmYD^Gy0E0<c>B8E`E&HMY0^O2ox6o>_?AkM5iedXpGNjy3uBae~FbVROr&>GzWyt
zHgd|X&(HK=Q}9w^=^D1}*g<h{q`rRGpAo}XfQJdA)pV2X)WiXMx@)S*MZi`n`on)F
zW at T*wRS at sIxIJqFE-ICFZCIt8K>G5bqN4c%OBaX_zcjrdw<c}wg;NAb;+ at 7t*ngpE
zY5{=}x40-jzq1j_dXmI2u}OIodYgCyPIi)$tN;4CWoIVZfd8K5!-;2+{?`Mov3C9X
zns49GNL6S)mtIXTFqoMK&mlJhI^jB}i-QT~f?UyQR^n<S=)sSVPu{$LzfU03AZr|y
zkI<`|m&vZF0CLvp+{=cB1}4LpY7qQckzxXUZ^ORkMC{okRKYPqE{hi{o=OyFq at TD_
zez*H4+h6uv<Ly1VGis-|UcO{Fz`qVxj57g=DdHA1OTtD7$i}l1_KOzLrnmJyJB}ST
zbD{weAQL*>(9Tbai|IENIUSgj_~<zchOJvgTo at DMd+)Al*RJ3T1F#Fc{T1=C6{dK4
z)&bNYtq_n%)=fNHPfNN`t>Cv}jLvRvU>*A at wx4so1f5-eqj_(iw&NyBWS(EyRP^kb
zv4+N0e?rhLbgU5xQ(O`^(QMeCh98cUWt&dTVkf6p6%{=c6r5aLg+Jl}=7|S*RmcZ?
z^X1Ef!G-^WA-+dj?;X%rBB3c3tlpua3)}oD!O_Hw6ieqB#tahldYTW{hWFl}lCVz1
z14eux=_ae%r{~x|IGB*px3PmT9hUp{?iION>BB9=B^UqYbn3NCc7$KJAUL`7-c7u#
z-kQMWdQ){SpxFEZ0AEgSZkGTHuJL?2(6CQpPh0ibbB9t;*@q8|q!@2ODTX(+Ux9#r
zOn<R2F*g6BF(ZNZsC+b8td5gSQVsmv|CwRokyka{g8lZoCEQt#6I?0(L=s^PuAt^{
zc=I$!xQO28|I4Z+0u&NCAq~^KOP8BU9Se&)e&r5b@%|a+55)&qW_3hsNtxEbfdF;s
zls??tv^%rBgN6(_0X?hvPe%*mVb=1$`Oxggk2i4pkfp`&h})O9VbrKmJkdNzQ8Q;M
zH{CieEF04NA`zWt5nE`If3#`aR%gBm;yw%zA^>Ho2o#*3fPF~VW39Ib%Si^tvN1q|
zfxCA*W-Jv|aztE6&#7^s3BK at V&-R@<EgnUHB}p_N!o$64oMdH%QeYAG9ES%%?`=0y
zs<XRyKOoHt$fm0f1!<O!13X+Ww1t^rc=P5{LhjnND?}Mu)!VjijVHL1PLsb?+qP}t
zuW^%@4pP-cTfC9H2XW1xXmD1{-OXFK-o1T$eC`FCX?OT*qWSe-N*XwynxEHxQywId
znu1i|xdbFcq-CLzPe}eO!*v+7#o at hIZxlW4%0cujzec!RIcQ^$GH>z7Ph>}pSyaGz
z3nHt(8;T$ca*a4pnt at bIc*C{805(aF at G}n|GWzE##H$~kGBHs>0Ra at eT<Lq9(tnt~
zew4mT;JI at i6-TF%5sEZ2FtB*bn9-yE)PI{!^jPwSb1jKqAj0_0GZrj30;Ih!R6Q1d
z&4P8)6XhmSq-W2bk(<t&HOm7+9;UsHT?!4A at y*F2b_870(bmqne!VZm0Qfj~e$YbA
zce|>fyXfm%tS8IGl)p)%ylNKFl=*?a3dt7QNfgtmKALQ-j^nTah7f<|viCrT#k%rD
z3e?)RT6B;Y=7ILmp at r!;Z}e!B0)|O<!akEj2cQV>`>ooE&_7%_rbp}bBR?{SOR%JJ
z>r-jQJ$-szRlFOGdhbD&s(bbopA-qeefx at tLjtm|U2~=$fO?Xc^>lhQeah+SdRa2W
ze7<Y3M!r$^b903pf|4>d21lZDU?<OZ?Ikgz^&{caJ$mrq3r;)r#8>ceN)WflNqLkQ
z6|7OrglE7+NIMP8nu2dd8LxsW_4G*+iBfY2_7fE|KI+ at 97!p*_o)N(0&T$fd-gQb1
zpSp<b8Vq;Nf|Hm#nrpu)$V+^;(r|%88erOYoP~bmatix6`*#Dx*|b)kkRvhch$iv7
z*RN-I-%%VzpVbWS1^p$G1$P#m;?QG$Uj}v^K4i#9@<t#B9pnG}yQy8()CAV9v!4UN
z1tM%aYcmeL%I5$oUGHWqgxc$F at bH+p7%OkqK^&P!Bbk5FgHa#TrtPvhBdBR#UyoB&
zeS1pA%!#~{%%Bndhwx-OYE6Xf3#&v8Bz0>_2T9^=vUQ;~vwXsKe~`Q2jXfl0Jt+)3
zJ_(lV47NpaXAC3P^vy-=T_~7JkNQyVVi}>B+NFA7aKUGi6A}`h;5fU&wqP&>rTioZ
zcN#a?DM8CPJp;$!>$cieMq+rA at 3ocd9%DY?7!@9PBd5-tTZMO^d<qDy)0aSdJaL<+
zrzZ$2Z%tPU{2|ArN?;4B0-~(19D&!!Ya<wjhSxB$UOzsocInbLYkxpMd#lXVv%Ax0
z2^v$?r60UetR!@i-21#5M&j1Zo7h?#SX$}DBI@$@=VE>9BE<E=+v0^1|IjZblxIoF
zO7&1c4vL>=|8AS6^Xd=XCCNqs7Wg&$(Nnu%jQEH1l?(73Xh6RY(wjI^d`NLp-N;w)
z>k9z#md_3*13PoZaIZ}ZUlns*Wx9aEa`T5^K|6Hl at UW<;n-N%tZ&b?1xM1qcL>i6x
zgjWZr^yes=Pn5B~AQEx#|Ej!D)Z<7T<W*%%SNpX}yog#kJ!LjWj!Go%5o7XKaow@=
z503CreBHDUj<c{uJ6%(;z3FD8A$vjEGv6VRsPtL&J)Vm1S=Wc#&sp=UX0r*{cqsh`
zhiCxJ+ArzJfIOs)XVX?jmhZbb+bV|>FBJDKZxd%Ahw6xO;~^%eEqIMC>Jc)bS>Og{
z3y0j%<j3Oce+hzUN@<&Z{r?^Y at P7t8`QLl;m;vj>r;K2P(;I;9C8n5==Lkp^dzx)>
zdMSRiKtwZk<7l!6b)BE(GjIN1K!m{*Kpup|Br62n1dm*7Dm2ZCoy<~}Ue62-30aK{
z6W><eauP-o;vr`?Y}j%1q%4OQ!YBPqfm!yrev at y$#j7hhB?Umd&{Kl4$}1{di87^=
zB-S0pYS>)|ng$BiPPmGRTs^$K#O^*o#ZO?IeV+L*UR((a)35XpFAd60h$<}|4_(D%
zkACrLw_p4cuFEQ`1pELqYo at y2wv8mY4Qd_yjyRWj5Er+@w~`+DyxL&qSP*LzY5aD|
z^qe-8dLkG|o=CS8B#A3S!jqh<zkTCTuZ at w&Td(sbN~XS5dWv~0vZ|_&mX6f_+lcWJ
zVWFY_Jd>H)AYShu2;i{M&&yYmxRsf<Sw7N`#`fQ!qODuE{x~kk-(SH<Lz3A4Yn_eK
zIzp)7l_TkJD=C>@zFJauEIr-v*Z9y$H at 5VX^y(EkcB)3Gzw!C1)n*STd5ly^@%^2*
zetoM;g91Ay^yf1Uw?B4wI=vLFC*??oQc%>Z!UAQB at mv6WC!(JrvQt&NW>MNj?M+Qv
z8X_-3 at WgkpA4JKAwOHY|nLm;EZ5u^&-2C;w0@@|M>(Y=3X_)X=MA}wXn|{}(lKv1|
zQafQNA-W_g!<Q#kslnl;rE@*`2wYz=ZEI at _#2X3F5F<iG&qweHV}m+b#uoq|pk75g
z1^pC;#>UUkyU5AOA$x=TfDsved(VLbyv?WL;$mQJh|L$zpO at Zxd|YnympwE*Q;`>R
zGe)@Z6_9=ZewskZ5e~e6pH`HD<sM4O7kj38y=k;=e-#onEvH|o7U4mcEL-*rew2{2
ztcVzGD$W>b+qaqu+sG+`5yY>oOX=^LCF)63sfpN4Oy=t<BS*p)-P&kkov$%YUHhWy
z_|x9$(5 at -0z^~pD7DnCN-Q7KvP%t%>!s8>DCTF{^v%B#va*_KO^|rp1lV>V#Smccl
zj?5ag8@{xWyBpDLRQOSf3{+BqU|eR(cj&Ng%^I!rm4NVs5Zt%^t^1Dh{OSY__xAD{
zRn<e-`gxF#lYR`m%_l-aH<<_}fk^8BPhU%~+wmOGFL;J`8_s3mKqxPDYgAx)?QMxZ
z*P5i1M*jq%W at 5yV>fbE6!>L69_}7C!%3i%XLF!K$uJm*ZJJ>A9Z`HQ9ii*QU!mWB<
zmbfvnEl8vQgQ&kI*ALg}8U1?^r9j at CGtcVkBnXLkx@-{rE%eGy?nt#{m<FY=gHfM^
z5FDh6yQcBzdLZm<<@24uQdI8NzaaP>jDGmNV(oEdp9H?Z0dw&QLj&6r$S3j)nG}_c
za|L!RFGDFK1Rc0YbQNV;GFm9YOV1_K_ at CW(Z?ZxA{d4LsrO16uHlZ3`rA_=!!oyvE
zJ|OSxiaC)}2(rn-nLcRw5g>d6xyH?u-ISkdlpf7;-25GK+|BE+7Q7s&jt3>;TKngQ
z;86^6s3FZRJyR at m4@rRBOFDaw?Yb4;ey!WAjf~f{v=Egf$0?I1S5;Sst;@PWc7gaW
z>5t0pgzDi3k5 at nFXO$S-rCNVpmd~Lx8^}ELJD}H=#+7hU!y+x8uv_g=Xy}pZXVjuK
zV>!-A&s%`@P3`Z3eR<pK&q$8spwqwDJDuatfD>h}L*`~O+q{545EXnm{c$c8n=FW9
z8A=;(^CiQNeq83HD!w>*$p%coH6X=W19#k^W5;{h*?IZ->aox-_7)NQoYUy-x((o2
zx at nmZ;Pp89PwSV>C+g{wCyabes7og?)Vb_7=#wb6ZM#AOP^uYkQz5E9Ji`2q=(T|b
z7M8fim#&ERCJv>rHS^uQ-nO<6 at god`%@hfeBWAe~2V_ at nl`{O`vHSgz at t-w6#KK_7
z{a&NoA&CX=+*u}_RaqI at HsWH_dAL9EB%BKUWjoczI7}0B2(=5oBWO})U~WOF`NGyO
zv7@*4j<m}A6L*(hG|S5#UApXnWY0|9zc<~?$w{WqX71KoIXR*~r2ihmuP4u*t-Hx`
zle=8c921bplOY-O&k)bz5rIL$!AwTeDlxfa^`*2FRM>X35-}n7=9Zmwkkz$y9%V^!
z%QpR){z-dIMciG;(18hqDDp)OUr~t=E_Xoj`WDU#zAX8Pr?#Hf_3M%S5~`<V=SmmY
z9J^MP4L8T;=RFOrmez-suI-xgKQyK+KkiiZFa~G>6_vAhD}ll{tX>VFt>f=>;BN1_
zA)O7GY6%y{;t_sFFRR|hM-C%-z+|(RkB^BU9Zo+m90vV8T5zcysjj~1Tt&W0_X&L|
zyWz}ro`Glq78?o!?GQ=VF6}~zc=&RAfi6MRo&uBslLZs5Ws+$?R;8s?A*7;5tOUK8
zI(@p(E?_*bR9iEa-nnX(Xo`86nLf*x>;AB`u_>StJzy#9Va?39IS)y->7#OZ@<TIp
z68$5vmWS8A<Sf8aaly#nZ0krV0|N!;f195l0PAogql@?mc&FcLYNVHsk{qXlnnNF@
zz;&gX|KwLA22y|qD1w%6SL--nKmrgA+2TEh?{GT>IzZK7*RIdhS4fR2ey6o4T^B9a
zsnff`K8yk6yDt%{r!1O)10j!l6Ik~4?Q^^Xsfh{s3%>w!UC7wh&N_D9?ZRtp3(b5W
z$TvEf;8`l4ozwem$J=l_`X{8pRi~s0|E{TIf*FN1H6WG;!KVluHGX>A*3u`J$`GU{
z@&QA8QWfYAW%~ZKOm6eNv<a4=gv(1V|755A%d?OnT3aT&X*0q(+~=NXNolNF!N1t5
z*O``q#>^jFjMCW7>;bPrF9cSiDZpd=A!H_hVkOU?A9>RLIUkXx5e+d at m9&E7c)A4-
zMjaFjG0W0Y_ID>0Xl0km-q48Cy?b%8osPyYGGzEPy*qan6JxQmptQE3;!2EUY5p+l
zsyKQ-gE|S*Af^42wkZ-cf&l&x40nnLRIqv*x;<i5VMAT;-ZR|e_Au^<Xa5LG!O}n+
zwe}^qA3*2My?d#3-8}Fn_V&dr6K)d)0~kDLoYFeeN_MvT<wKM8BfQMhqOfBkZHJ?N
ziOgWrwlSlpS%6uR=%^w2vv^Z0-{j=G(w%O7T`ZZ6tlzmu_wM1{2d2b;CMv%sx$k=X
z6dkgkHw!^^HlsQh(Yu>>?gT`Ppp?7d@&{~R at fG1wDR@vo$kmJ9x38O`qD^V|ys8lc
zb!tz7UCw&4RB1ryBtEVEMC?0 at xo?Y(KH*AH(Z1hLAznlnU0Ju!=(%qY3FW$T0jRc$
zd7-gzt2^yGfjy(Q=U(Z?XuN(X;6r-)7XZGS&TF=nf%5!w|0f+mocL6!V|@GbuMK>H
zzF->%5KbJ0#!%?MG3>j^5l&XVR2p^d*-EX at N!Z)l+O at FOszP6ri$c$LQUc6a(t4Sl
z|CqX%C;19;rW4;)FKwI at S!&tOnyCubzf$&GDr!J)_C#-*F08^k2i?TyXo`YBVq?3w
z#XojpNF%q+BaY-E-7!^x+rMv9zxPO3?9nn^zwQ0!w-4*`_cz)a`*iKC^$p#w6TToV
zGk*o0I?tZrz}NNtn|~N6?Y=dl*MlWt_0b`@UAv2B8jdC2diF_pLdo85bvyQ@!oSCI
zN)C1E{i=U+3Z#kmKa0_CL-h2fhgQ?F^>KRuKD|CYqcqM&>&Mlt&>d{1*D-Zz*XA8q
zH=U7bhXVowwN1?JI_%MZK6xFu7iXyJad(CV)-Da6)X(O9b<B-34H%#EGEL*0|J_a$
z-e8_8t^cw|d*r5CUE{V<;2BX<n^t}JM%sjwFSxDy=k5FV^fK=E7xK<YAqLytzc`hc
zDCFyoJLBY(M)hU@<HCd!8lj1oZ_l&)J1%&_(ji*IXr$IZUG!M#-&}xU?VuRmOb<uw
zCwF;Z#|eD}ev+&#H}UV^w>Z7U6VYl+b8;dycy4wAr==aC`TD{oS=ZX7b2T$3*j?9j
z0dTWVB>bGU`rYyW+VM1 at G{3HBVDyr(tp{1+NjV1*1tNGleiw$Arec82r`#P>i`{Jk
zCijS(@~*Pd(xR!CY0ON~%XE6&{;ll~;X6+LRizOsIL0}*?(A$_zjm!neZ~3>dWZbc
zjZa&?8|e1=0*7Z|`Z$(_^MuG;&i#$G<@tSUGie>szI at 0|?ekL~LHyaPyTG)kiVDo8
zS*X{jXPYFc)cQ?hOA41yyxMVA5BcjU!|eNy9J&8W1F`zDA^pC$KQ-r6=+EQM_(1~g
z0SRB}rg$>0j%$sbnK|72XGnN{yQ!KkI8-5xQyqxA^HV}dclyS4Th_{J(2z6sjMK=d
zrz2>Mf|@r?(D7%u)i}<W(fQdfiyI~j#-Hjp+9RP|N41?Pc}0n`_BPu$dEdQrXL6El
z85Wn;p&);^qO{b|<9iloP1tC%r|Vn4xie?j;Ghhb|3;~qS-3hq?FCgNahmoBt#zpA
zZOHhA9g0Y<V^F+8DDe5#hg+uYAM%$wGCr0{rQw$GG#M=zM6K99RQq|a9^@d&o1cgh
zi?(-LX>F3A(mq+ehUQ5sZ%Ph;Z6gmX-2hQB`R3Jm&(^gx5tA6Q<98X=y&Pb77Bpo;
z$GNXpJN|6-e04-<`0F;gx~Q5Z1umCy(5PfqM4LDH?PNTxKDS5$%qKl{*^3g7%%+m5
zG%;;kc0yKN>u6_{$vNefl_eL}O`JA#xWnTcH{N1*)&`#Z%Ll7Hb5QqP$7**{C{Ff%
zE(kwWc7G||3H$o|kcNS$L7KVaQSE^yXZDia)i+!gFtKx?=;rbnt at 3>J=;+C^?&gDa
zOttzd2VEFW(}9ATTAI03i9$k*QPT6cV5zpty6Q74UpQ2?bfIow)u>bV;w!C(Cl>x7
zZnNuTsHeAk-o#NxM%s#Q9HIbNS4pF->cIwztDs3Y1QsQKv~8pv>2apfk3=B`{n+2F
z_q3{tVNW7be?2_(bxO!)8yE7%k4I;ITY12 at XIj|aolYZOQXD$^DrD_DVAF-sR{<#v
zdhU*D^>PrBhs6UPf)^G1z6A#PWNtRi-;fpkaysYyC2nv(Ey5#>EPD{dV!OTd&JGdb
zR6d+$-z4xzdEDZM*<Ov=iia=Rh7j&=?VYYYrz$S^l*iyvx*kbTKC6ot?P}9}k}5e#
z(`@>W8FOfkMhtv|%2iR-z#G<wq at R!f=EhN&?H3EDjDSqXei>m72tiZiJ3i<1uo)W8
zwjEM#<>iG;oz#OGjL^;5Ms7>T#{>%kw@=J4b{oSrJW7dh!h{JQAK6+FW9$$G8?ifU
zg&gO{<C|Ghw_Cy_5tg5<7?rH>=f~s~w&O?4ZNFSDpMyv?cGO8Jz=DCT78V3b6kC&T
zyb2#sw-WQpUOQ+|otVv9kj`Fkgj?>;P(SE-yd|vSUc;B~&*|KvT^Y~8JN1o4Y&P-n
zHHd3Za&#SvRUfo6onLi~+(kQU;@&?Ymhp4v+xPssv47Hv0dH~SA0Q>qG5QKc=@N`s
zP}{=gT_kQ>EgfYU;1EC;sfE=0kN2n>&O<M)!V7t{exOuby#v5hcJO|O!*n{H?tOmz
zw%m2hYOTEvU;R-9EvDM27Ht|l7tu%MZrvtYbm>3EdP(Gzvu&DN!)mj>huM9F56HB^
zi*;ckcC8zK$IVOv9Ps<E?O%g^v}@R(%c2AZ!gFoqH#hke#e;zGyY=d&s~AB22*jeH
z{^vRkBjg8B8iS=kvO>*&x2E}#K<A=ZGRfzarrNLCv|BpIWAwxAZ<Lr-G5UOAc(`EY
z5~wNW6NVV7gjaf+?0J;jg-Hir$rw(3IYadI2c at dz1<n#*SvxPATiMx5$)GIOlO#ft
zoM|rv2`nd1R at WGQ<Cr;x1|y>=L3?J4Q>P_D9Y#;DOXrhv=XyQ=mcpJ^*4U at a95j5c
zqZRCv6TQ!CJ(S*Zm^5wL;+OZ5d!RO#vqZav;-YBXK}@m6$b)cTo+0j?V~7CWmrg0t
zf5C!=e+#?;Q(Q!nl$tAB&2~_FvD(GP?Zgx;ZqNQrti*~G&5T9o`o#+RAbkfIbNnCT
z#7_X;I2nY`BoCD8p3EL;W_RP3Gh|?kLle&b^f;4hY~uQ$DzNSIi}}e5jIZJxnZ3GQ
z!=?jK#M5==YKn^bjCX`WuJQE5f^oD+o*C7-g+%S^n#=z$-EN3)T8JX6?5=v`3PCI_
z7!5-?a=hU<RI<l(MwcX4ua at deXGqwQ09R3C+>~l>f!R<jc(gp3plI#^!xiPn`utwB
z2AoT-T|1`_f5PkRVB#$c@$b4N_C$ZE&;PBzt;O)a$8AK3Ec?FdKHb@|_f at au^r>4p
z`#F?HTP_nPHVY*S(Tclh!GblEMsaE>J-Yi^12aCkAalTS`oDVTlsf5`T`)fET3D4#
zf5{7nLzN%>Km!qb%x>IX+LrZjSZn^7W-K7Y&sh+TxLZ#*FvsR;@b0*~1ERh4q3sbd
z0}E~;gol}179moqIaP~b2+8)}4^Q-oJfB<FG}R>SUNxlW(5JIE{%0HAmeAENcP)Qz
zyHg|E<PL2YOd?{6&el!i`zfM3O?M_=1}mOQc_xBoYBDY^R5Iv6u<ZNVZWTScV<=)m
z4HHR5+T7Xmhte*p_6202=-Pl5t)36cHQ)g`uq$3%jA-!SJY{E_MckShdBoXqOL9I{
zOGCrdue*cZfA&1K;&w_7f>F7Lt7i2$*ODm-ZsTmWzaKVv&?xmKJ%rSq{hT>4rZ>Wm
zrPqyfns+u~zl_<kDuYuiS!xymCYXHt_VCbk(u;|h0}=s`ZVrgwxBIs~jep=BvrMJR
zzV$6&bo3L=k2}{Vj3GY at n1l;$ICg%5{Q<+kKEL~Q7E_IAR4={n$Tj)EEGY)Wz}~D*
zX8A;KAm9+`PyVEXg<(Ry;J`DQ$f&fRqVci%&sShDJd1z!vu6iV+a0y at dpanW(Tj?`
zdfjdKL6zg&*|WD!TUooGY%S|QsbPt7*PqJo#1VK_m0S%%o)mdG at 9e$X-y-8`4~8(Y
zL`PQ_ZP;vD22qCPY at tty3+Y*{k9hy#FnwAPfdk<IIUwW>dQ==(q<Pt=A!=R^Xs|P?
zB2R(<f>h9xh5FBdnq6&)4C(cnwJ7jl^0pV at PUln~-B=kRdUhgyrP>YJ`f(5KSEc&;
zAT9_Md?H%gb_S9$RXU1K{&B(H3`-E*B7eISA0MiTcEnkUC066YM$I#UeJ;6dq<C|B
z^=osDQwVW?|9*&kf#IxRN1%p(o-B!O-?OK$+wv7Fp2)lT?8sSkilo&|Sk2@&cJZ|S
z(4d&?n3b6`XtlBL-qF?%ScSa at LjXlKU|{I+vRIG1$3MR$QD<uq<bZS4dH8TiqGH{q
z=b=-3g&;UXO22n at 9~2`%)h%MNy*eewC-rkq=r7uYwY3Xqb6YswNmTa;Nut$${*zgY
zvM#lc)Wx=xwFj0g7MDS&MDGp#Ne)aGamu6#ZMxoWldF&qT$yvQ+fN#0mKWS3gIxCh
zxzE;*dtGF)8a;YY`y(Nw>*^<V9hl)at$sX?57DH|!j{&NwANjkM+ZU7G-JT%nQ!&N
z#latQTSqPNLhIS?wcVp8l+Nh#uUlVHafiaWl$aU4CV<y%qG37t)kRG>C{_Ey|36wD
z*ZqAm@;#1pmUmdH<;}$|ROS^&k4T>lJ87XQn8bv8$Lu>W4Q1B4HkY&m-*2u47g_$e
zgy3mq$>qo$YRmeZm3v4*8DM<QuX7Y_2WY_iM&W1sm+Y>$8jqYZpvYJ|8Fapudry9^
z9xLE!)a^+3;r|g_$ad_gq&-^Ve&WKU!h`#3>AQLQMD;<&YtNhVh9hKt*M4DG at ZKpp
zx$N+U!y!e8APZ0UB%OHh)Nh!;YrlH5g386k>eQJk@|q6s)-bH#!8<2g^`k;$zxFyt
zwy=|}`g6rFtlxY3O6e}3flnbHWag3UfMLV-9O~am#bDC2!yDeUeenA&(AN`rL>2e!
zJ-FA-l)~=v6L*0ktmO8x)sFzs1G1@%9q{n{BOh^-LOB3a>ijEF{xs$=f+nJLgeih8
zNP##rEZE+ at 4ti<>2u%INb}{{jU;lv(CLxus?5C?c#rV>j$P>49OxC=7rS18r{=$Tr
z6N>sAe$ekst>5z-H~i+<h#n32Jy3Wh4m*oJoI~XQ<om at C3mi*lE!X at Amr$PGt|yCs
zGdpOn9}Ba at +xv2VjZ`yYDSUOnQU<-lY8_pZEf0<X-$Vg;&!XZ+WGS5-#gCRboNu$!
z8wLdD6F}W<u*%JECU>^i at w!F8 at TYz!-#Pz}zUD5c<@={V*d)F?UNz0|%=9pY9hSSA
z3KZI#GBUC4 at FC)7wRa^BAd~?NoGX>S<y799)<UXIyfwtYApFjvkNab`VtaM|wCerf
zMb(t6Z|ousJO>VbO_;SjBS at ADGr@u=I7lxuZ>e?io1ar`4ouGmRU|Ti12fJ7GF|xT
z`zVm5PmZK;J~dK*oBy<E6V;wQbFcXPtajO3ffDO3+0)_B08d^@$Cq)u(1|IWo9!}e
z$PlN#UR>QVh%>oI!TS6LDblCm;?^<<uf_5oFIm0;ZYY**jX=*)x9CMEc5K>u3$77q
zn98nneIY%2?V3Q{n=43eOw0z&v|Gll2%G9`Lmg9T at i2M{H4l5*gaie3xYY9kWgAZ1
z>29K7gECT=85?c)r;Pjicfa;)5*JY!;?9F8PPTxifZ|DPK)~ckO+pP~zQvSDA}ldO
z^WU9Ldzy4=_g!mEW^`S>e*JHMxIxz^JkW|yOq`T7O!hEG$oh7QzH6=Z+^1X~Xo(T2
z?wCAS2nzXBE8^{T2Y%bwU+Y!-3mSLt-J|+;<FEnq1TN(Kw1r5p$mQhe(|u#<9F6!n
z#~lr`6E~f=ASCnoCViDn#AI>;yOkRW@;|DIxyY3kq78-8ooo;;evQu8Lzsy(nZ>I&
zYgE3>%GzpoevW})Xs14uWiHO?!D1E>BLJl at n2S1mRP>~N7uS{ry2+qi0|hPV at m5)A
zvv$AIuV1~|M_b#nZ1~1!1DK3(%Lu(mo8&Ui(uv8{`)T7&?2^!@=PuXB$9r at Zoj|9I
zQT7_VX*b#SN2TEjry?Tk;H)qHogBQ`=GN~cr(i1@$8T_Vw|m>C5#P8$*2;qXhxpW-
zLYaR#Fj|q*0Xg}Ji$@hp{(uPjTwHkPC4ppNGSiv&_(Oks+YMMjUNrvZ>fO3O5Uuv(
z4nulP{nV2>+{er-TrZ6+eQrjak6X_$m$RR{9(i(f=mU1buHc9#&gW)NL`{y{6awG9
zV6wIHWHgVBLWe}XSnYkdDMj9M=e*o~a_qNVH#Ph+JYcuSe`ea;BnQ9vpTB-7LK+V;
zDC{F?=l>-xcuN0;BR24odr)cEbB9a=Ne?%*nfm(r=fBlax6y)m@`Sd3MS$aJVqSqw
zoHxDHJ&P8)xVTpoXu4ct?BSRZX|Ktz17}g#(CX~YqNB}H_=a?!y6gM}C+QjZY_Rm2
zUwb-WnLhZjVzvgZ%3AwuX<gP?J+i1Tj~mEpq$~HH+Z?tjJSw-VG!g8J9PPQYj9i$0
zpwr(j<U5eaXy?08B9xa6pIK>s+SAy3(+|~dHw%Y**XLQCXx)0bug%8^TPMkBI|rQf
z^}4-3vGbLM22mC#CmeUOI<vr_Bw%R!r~z&U6He~y-gBw$z(AGGO4ePqw#I6-yY!{^
zI at 8}@Z63GY;Ia4nkA~|HE*dYnZ<zaW)Ucw1qmDjWW&4w?xUgd*C#&#s8fO$kX4RS~
zWOjbL+ at qJ`f^B{bIt|xKZh+QNsW#n;-CT>lV+T-S+8!_6m)Evaukw!{bq(%^m0!5{
zzF_6D<Bj7kDXuT-YBf0$>Y8P@{@WCyy{iMZr!pe*RPr`KbWK*=9=M@#wU<d)_y^y)
z*LjbmDQEz%Sre*E*ZZ3BeRaD`?s0X0c1ZY)sd0 at obPkNLteEkH09@%xwxa_wT9v1=
z=z@?+!?(8<a|Jy<&n>L`HloCH-1V&mFD{44o79<I|N9Z4&7|EqUCj4KM%vZnBv)4E
zklz~UDypiEak?r=x(#A+W8FSvqh^k2nF1aVHP?@(?Q`ox$4cwBPH+Fq^qij0uzBr4
za8pa8zMq&*%__6@=`!<n6yWG+AMH_wvP8i+89xPZY)a2z^Y?`3-++l1fA65NN80+5
z@>j2{BWC!x6udA=dQ`NMmIDX{vs~|-EAdKUmZ<qyAuX|KlhsYo2K)SFsV)VsHWTCr
zt=l*$r at Pc<LXs5Sw7E}v&|gW=`$+HLo;^n$U<4B&On1vOc)*eyea|RS`Ouh`X7S0$
zEihjBI at 8?s^oZ4`J1hZkplkC{x6$j%L)`Y(P at bQuxxF;w&yI)RLgRGXzKt5-5^h;W
zs3N3$2SF98mbH`i57YM at n)Fq!s~xR^6CE92l1D=|E+rx;IG at LZTV1?suSD$^OH0k*
zD&h%ra8PQ%y%>Vo(E at rIiedb|EQ}O?Bp^Hdw at z2tihBePqA}^Z%KN*KqTPX5Hs0nZ
z;5RbgzX32X#LFll2JCn>Fd~Orh8p#1vKqSW_LTssGWPgTrSsP9dk4?+0@|Pv1VBiz
zU};Q_Pw;??N~QP$&p}|#_&fUQ;(jnIGk%$KrJ#?%`)&MHltt^;^n)YwA)RwdoS?-D
zD&^k04;~;d^;H=EsQaIo6`(aHblpY(Q4&#(&+Php)O{;%igcX8Rfaba6b1y7K5#sq
z!I19oAE5?@?(x)T4TcSal6aI^SwI)CujyHb&h<<XT7syGEhoKzR)DXu)sAQy&_c?9
z5_=_n&D<Z{ni&TZ+tJWZzjGf=ubj9CrU%WB6ceOi3M)HkO^tf3$*8e=7G5OfWDCg)
zUs`@6l|YsoGGQhQUtjO7ej{AVR(iYPY3!xVHswC&MpNqIr=oi=+GNm*ASiv6Io=#<
zc8yYkRkzDq8vl?)LjlohD1vPXCxx((&~!SL_o^ytnfs#-JCh|e2l?8o{sLK+Rc9}g
z7n`2U$bi`2p<TOytNyAkKjM=1n2mR*;Rez}h1ymA#Bxh(dWI<xh99n*9TpX(J?Js3
z4~GIJ$nXor#E#^A%TSg3 at PTQe=>;9iH@>t#y?7^C4s8+CvgR{0%%f!E5{T*GDw>P$
z@%AOaHy4-YYgAP1NzeS{hAF5_VAPR|-4Hkq9JpC8j;hacKb3LomuZI1w4kX~BwfVR
z$D%Uo0QL(y5OZT5VEy+UK3pU~^wi)MDmWxo8Sa+xywx7TzN-9dHn1q+T49{q>_4l$
zjKjjqKl#>!y#@yaY-D_kg8B8f(G0M)7(X5g$w{iI1>=&?WD=7VwOZPdR6@&0RJ51O
zw{|(^w%$nGYB6HKqWgm at XOD{7=57_kWQ#5z88!Ijiz&VHTpIZv`f)&GHxmj%IOWpM
zmT!pk;tpK2qsD&u%9V-1-8(nKIKI9TNCKrDkisLLzF4rw8bMWMQ)PVqY;sLtif{Q7
zdy_2X!uYE3ONXg1j_`yD+uxm`Fe57Bbu;Ec&*Uh;l^DagHewht%<TUCY2TA5PZESV
z9_g5LBXW9s>@NYLQvIKt7?r_uu0bnH&RpB at aSv#Lb$lC2^iNsftSyZUrKG5N3@^^r
zy4hRXb=fjwURWq?MC9np+i_93SUD+H(Ob at 2n(mF|&YXTf-|vy1+lgR>Yb7Nn^zv4I
z(4Cs_JI-d`rLuM3I+Pi9Wfv+tFb?CyWy_$(8Oei(4n3*pm_$Q&f!vn3yPTmy?`N1F
zt$7wITDDDCk=IbyxG8HmS~@3#=l;GWZ(48dUHyd_KQ+*aQNMr<q++ywDY1<-%LIl4
zx+pA(RqObn9W+OKOz~4o-gDCMapRFgfoG#i^?L_?EH59pIVw8Zl+RK+5w*biUowAx
zMkR>i3?F+-VR`qa5m`V9hUpHsOb at E<>KF9zyUb5S2Xg8i9_<bf2o9Durh?_obY9p)
zt7Z2t8^iR;I&^$m$3UrYNH3+|0BA%zf6Kl*B_%!(P3`W=5-}p^XL<Tw%KNgiGxUN4
zPBXH0 at bdbF!bkL`%_U$E4<4*yiwopTB3A#Y-&lBDp^Qsek3yTMBIQSjiF@(#M+}xQ
zmJGj_`n*U1VTxZ{_a`JQiQiGa at 7Rvb)p&ifv{{YqP9uUe_3-Embz|)+;s{Q5{<`zC
z=I0KpsZ$5}7|n3S><|-T9h4eo=EnV+F{!9*{aAT6YQ&{7(1|$pSuSqaxQ$&FO&C9(
z5_!a|6Ff3`yIy($vyf;^DM%<+a&dKiLSKjFlzHm;b8_b%d_BO0$V{j-ymMrzZT#JA
zt9~w+`^}h<f*>Ww1Q at c2RH#u6qC4luPSP4tHoy1B$=SIS01ujbX}sl<$x#Nbr>KlS
zN!fG7 at bR}Jhb-nyt-{X0#<x5^F(N#)*J#fZ^hvm#rE0W at Y8`^ZO34njrU$3(?q`)(
zA at h^^b&D1)0v$`k5~t_PMb;`})_g6!U;;DIW)o3tBfR6#8QKx?J=?(o0 at I`Lkm72Q
zyp7{8phASUppL_{2ie8Bvn}YEu4XuRGv0$aNG_Q%8L5Rv21*cff%h#2kX*C~{0%|%
z3ytZd%_;Ay^8y7l4!?wgv{3T}@tiqxFN|Z at 0DRGKz`^F?B`*G&`YvqG9uF7|ux{vg
z=I at Y`kD-JKYE3P>9Qp;OAm>2)bd|}|rX8la4ek+qQYvIne9wX5EGtN#<*!zI2X=+%
zE$7n`%@&M*0YD8qZ{wy-KPn#5Sejl_)k-^=cftIoVd${T0Uy>n#6{y}t|S?Fc`b|7
z6of#2jJYcD`Y>oks%=Nesc<>q8z#S;{9|i2WP#vd=JV7LcTlfapSKTvv)bxvm7&gl
zQ5K8NBu;Crc{#r#Rcr6uOB)91>sRB9D9G_8mh(fAhr9bHN|zM1?7oFbjem^}d(<d%
z;m<vAZZs*yPfCOI-tKB`X4hjQ{VExsDd<q5>Sm4}0V<n!R6EUI52f|hc)Ep#^q*VX
z$~Q3d-ErD0->rLZ2G5%=SZKgztzngO%G;|$;aJtm<CFMFNN2$#m$)u=G&a5jtZ=8P
z+uXNuC*1j^qV<eW>5 at Vz{Rn5zo!e*JOT1WNPyQzF5vd6!&D7LScxE1sADEq)$m1D=
zg at l}dkEnhF(2KU30Um<DFG(Il6JJaynX^_`Sv-|cOlW#D$wH^WD4017q}LNVqBljG
zZRRt6J;du*I5I-BLKOiDbS&6c{nerY-Aq&P)*C6l&t+D{F9N>!@I#@!(5fWyr5awe
zW~q3?U<DqtE}g(>6_pP_5k7mAE^5W^-n<b~Uh|ro+OG}_6)y(et><XU7?9RF(PPbc
zfxiNLnwCzo=-<uYW^GvHrmz3)Z at qIfIRK55oUBG!7Ot%jbF8rOyL<oNT!5?seANB}
zDaL+G{k{)ZqO6mQ at 8d+{SR>ATNh$AIC~5+HmuKr9eklB>7~W#yo%r5bQZ9v!4Uq-@
zE^{NzE-aLZaUrJol~hg>rp>^vzmhr(e2ry=UEqWC4i~O$*Ud!2Q4p*6W5>KaJsHtc
z1eW#LKPHq|H=8#3K|?SIYi~=;dV at 1?0()=S(ugt56+5P6E0qfQLM)bUb0_oK9SfyU
zpK1_|{)4C~)7zBHFOyYJB%;TxfB*h#ceIh*+TFCGPUWD4n*hjQ`|j#FV%lf>;GOtn
z%CQIF#wsfdT`Ejgr|v`OQThh{y at iP6dA^KqXkRGc63O4S at P~vhf;xTDs}?To>oM|H
z5@;g5i<mwFyj6KIV=<u!Z<jNSwsU6$!@68J+EQ|KJcm;vY4ZvBwF_8Om`;rOWGS)>
zNzD88drJiX^a}|<UWaKb>({KIvlQQ-Dc-#^WIX=*`ge|q;M29M0-dhX-OzwO2SbxG
zDe)7pVZ%6ID5Rj!22GL^UAC)}Bv at 7utR>yki0_PabaHRs-jUF at GLrfk(X>D;dyRa>
zlr(Cklu0R`FdME8i at SDWTge2`4=Rz!NpX(!;QJ}S!5JmrGR%s=W*21%d_IJ061U|f
z6|}!2%OXbOK0hMUd>Q$?Zln at eVIgabAky=bm&=LGGe`}=KjF$9h>D^ZavEn{a6oKR
zVfW^Tjis-JJ}K(Z$lREHw*Tr#0TBtKdCUz*SCgoXtb-7X*bVc0T&gWTX>xDTsVf;`
zf!Q5AaA0 at z^wQJQpPziy_>eS}1{PivNfWFw)162|&QnYyXs2coZfqn;oYvH>aP<|c
z$!iGUu#S`p_82RN!&6kJNUEvnf?5}{(aa<4jd3MkW}G{x<*j&c#CgSgj}&S)1G|ct
z5dIyOsS??@|J+~FynpSlyL(4 at c{1g_y!8-aKrur0ENUi_0vITCGP6}X7&yDQDD~<k
zqGQ70D at eKF1$ipi*SImEyDk2D?!W#zZth*O9?&XX58XrwDK(vTfbrrl5tCvUP>xzk
zI*9)y;}_>jz4=_V6upjIu%cwUWt4Q+-rkxsWa!ZLa&idInGi$J3ne<M*lX%qlYXj*
z1AV<&k7K*}5$j3U7r`xdTeV8hV`O3&RV*gpyur)xiX#jSUoa<r_wL;_$2b<gN1FRe
z##JGlME`asSBE%s?d=wyLewG-g at g=QaIF>df9Xr4VP4A+fJAKUq6y8H=QXaCn`Z7$
zz4vkAjB%e=$4mv!5AgSA;t{2>6ndq at qc)aB%p&@lg<OZndP$$2%^TB>nrZ{?jur*t
z=0P61dF_!Apt_BR$KnBJBL@?Nq8i`gsDQ5TVQoX2<d-GcLckb~Q&)4Lx`Zwz?>vt4
zDc8O|9Dm}CI1U5UQeszLAFP-{n|Sb=z@`iI_8d?END$@?!E@<n`xtrh2H3AO_U?in
z4JDcz_8%9Q8_}01j~URkuYFF#*JIRsJ9QHVk=fdIvUcnPZo*%aNumu&(gmbCkB(mQ
zU?Lf+cj7><-(@1tnbQA_W)x3DyDY)S01w at ezkqmY2}GwC{DSYzvbH|aytA#^v|*cP
zelC}o?P$6SX48O%XTu*<Fpsirqo)sKM35vHp8)}Ph?WFVmAl5|!wchDN)9#e?I>F5
zP3ev#tbzIyVXWM}6 at SNZ1%p3v_AGK)P8iuZ at 101SvBG)aBRprwRBkqU&9L-QWNmR_
z;a>|}IjR&22#P3_;Jlh|JhxX+ at j(j3Dg4y at o=+GleF at QJSixiw9H(&z`*v4TI~*2v
zidj++aM`@z?nAFp!bKwhw1*EFlid6v)u4aAIOP(A=o4GOm2Hy>(TZb9%!Wnx*sviJ
z8t#8=Ewx#(zS_H+w{|F^8}T-y5S at fIeqrHQ!><KadXtkPse%%-A(Q{$z=#J=o{Yl8
zlROBk8X<a;*%>iWj#wI2Jw<1AuIw~QmpBEgdfk<jzCT at -UiR)?8p9 at tjM#0sed0tW
zc5hy<v9!x7I5Tilkmrn*rKS*5NF>0$kc$&HmMS62 at ItJN5+vG0lf}N;HXW&$Rj|y)
zFhi9X7YS_*-n%4jqKmMKbX*b1V`8wk!T>ND(bz!ZY0~tjc_~01Sf+OBJaJWZu3oNc
zr{KS85<dbmz%}~^?Iz9#TC_HqB;`4(s*>=ard6tOqnO8GUzr#44>SPYaELa|B=|?H
zw;UH2x)4NYYwM8kbggD{Jg{YxCn%qe$Q*hjehTm|nVzwBN6Wt4So%KM+iH+Z6!nDU
zC1hlLCof3%o>=6 at W?zsO%`3mSyz$}n>u+8*{yF#j<kkHQ4TCUO at h^XkrY9v7maP~c
z!QDT2uonl*x3SqWjuFaT-5kBu{Q%dFKsI~+`fA;kngT112PR`Tmp4E5CNVlm#{1Gz
z;P17x42hH3ykPq%YJm=ARp;oChlUv|Up8yr<Tr2LfT%&fB#b&w??C^lQA{x(z`#gV
zRo`wZ&7XZ7?i^spPk}bG_#~}~NAgBATXmd{8o)k)0QF09LD3budi7Tkx$Ww7wL{=%
zp-%Mc1VYf%MK{pl0ihDB-Ytr~f+B(A)#)0DG2|v04H@#4vyJn8wN3Q<OC(174j!zJ
zZlqSIeow1qw&*2h_jrXvh;yQ@&cz4Fao2Kew$4|BnxlmEgZX5prdwdvW0E+MuNnbS
z7(dugQ<I?x4e|Tt!+P(;RM=`mf?+o4Y8}xpJ&-FQaDCtM=lvEkZ!vD&L)WYa>5Y(O
zZT8q=4D#T?EB|AU3GsyEyA|AYxYp|!7-S%)IdbHAHk->Io`Qk+&xj1EcZxM2NRSOx
z=ofzVPfIq)>0tBi-+{k6gKi4M$7Y}V)f=GkKerd!`@gpL<Huf#icEFxk8KX_*tA1Z
zA^UI|@kW@%1-<X>A382c>ccE;oKpT4C$lnyP>>AZ@@X+-fFK9L&fJsE+i(`}A4n-M
zB)(Nc7PzgsT6Z_v)YQZz^Tq)b*uX!yQS-U+R^5Iwi5M2u_s+cty#<R3&8`*16j0NF
z)@Y)L{{h&B_}MCQD5#sr`ELBXmG&nh0ZxtBtZiaeA;<~}jG|IfwyQ%^bT-5s5bhAY
z_V04ZNnd1crn_y5hq{a;_?htC*RI7CQTUy6!bvm_`YDj|?Pk^ot+?{?`-YjA_2iY$
z;kg8+mzap?N(Q?^RO|KWOwn83!tmB7E8osu?+<xQnX2>k1IY7`9yCnbF?s$>-3LsP
zM|s`?82t1#Q4TmH#_pb!LH$YlH$f))Uct<^<t at m_MfWi$YIRaivoaJDhD_r${w97f
zm|F*?NbSvNXIqKWb3#GHM|10!((g&2leccPZyIbWYK=8S<DS)T0~BI$NCKon*SOn7
zi4^gVt0RRD5SVq8t`Iw5{lMPm?Pw(#GSf2t)XY=|qNcJzc|a?8;EWZ|W=7AD at d}BI
zWNu#$41;&rZ}WDbYXX;N1~6a_7b(W;RjuaLkwl6@!g`M;fSBckHWF(kyy=WRp`Fb^
zP4c)^Bzzzdd2^(`YTyPV2r<D1gdnVn;YB<$w~_&xivMw9tvix=2HR2=De-*Maq3=g
z(kXXUImy-YO3~KGM$2w<#%$v!8DYGZ1`M^>7B#mR=#AsS%adEMn>3q>F8Koo=Fl`w
z2r|CtmV7JEBjR-*Q&&5D>8?)tWkg+d#<XfF8RCr7RvG-0jEAxS-7n<^YG%q5X8skp
z1O`@DRo%(Sf#G~OC<uW?aiR?zr(0X+(N=Zr(ny)^T|sy9MMV}e!Y>zt$<NUVINZOl
zi?n3Zmn-b^>?J29`jD#VavKe;p*bM=!O<lZ5waHC9aj3nO$6}QQ=nk0MD^FpU)lE~
zw|7GB<Hy4X4xDta1xenQ%ingDl*&lDr_gCI at w%p%aYL&)=k?I7mfc$rg5c&=5#C;~
z;5F-k161way$&!oMe93mWRf0pbMAZgcr~7cd&uI-w$~Wxf&5OTj<UozzhHITU6ujP
zn5$b()qweZK*%d8#?d}ZxpU>>#b*hii{@{dno|@$U%=rM at vIv>z>Gn&iWZ(AjZbLT
z{WQ at oja~bGX#E&0BT1%L-&9j`e1kqu&sDVRC?lC~z!J{KDkIq~#Hg1o>#3?rFLA%J
zWvF0CgChRyWC%9sW#tHaiI+>P2#;laJ0S>JOCy9%Lng4En_Dtb;2%^Fy6*w&Cgx0>
zef9ZsZ?+#T)<?4}e8=WyXWPRsCZz+l+NOXfhFaO%c*AmHEi8nR?Dz@|g2{z}J+9hg
zqJxE+!bM11zZ$?ZVARg}@*0HW9!ZV~1H!9KnDk5lWyMdv_fT}IBN at -2WFhiRLqj_;
zJ|25 at luRW2Ts?4&C}Q81$dtD~rzbNZjfLa9Yd4sPHOVl)=cmtSFFCiWcaI)1^mbiB
zLK9FBMu!+%K4{R?sS_r&JITasK+rW~Rfm`m(DYs6=H~FLvlX|mviIFq65s7PRyoL~
z3S|gxOToI)W`@oyR*b=v`1$!!Js9ory0QMf>01}c8v$DR#J9ak?2Ckf)m|rwWWuq#
zalt7mA2^K!n+c7czHaZaS7Z%^i|z=7n);gVx{@A}!mb#QI?%jxNZr>NKflyUlD8N3
zV1#D^7lsvOo>hpZTFlegbO&NW4CZ>W31I5#dM&$m4AZ~bVF4x}xrh(^uGWVk32_Mt
zFe9_-j5+Q^he95{OtyXEeAFfw?~yF4G#j`R;zN+BRZp|;APS!9mw%LON-h#*I0{cL
za&06|2A0n+)u7S=1vI;)WPX}>e1MDx%raY=gth+8D05QYN8=|+Y69ZqzM8LQ0B~*X
z-udgk(6&7%aDYpjPQ65Gyl=kO<XfJ;mGLn#PJ|Hf`B-zNxm4?$xdXL%&X{zeJCQXN
z6F?tH_x5%+i=Urg1I6v+sZ(Ji)MC64;&p_UJFlWtD9Q7G8+*h!4BLmMu9slULgUK%
zcHfvh8=oy1qG)5Y7`Uf{vTlg6a?G!dVC-B3LH$Le4t^zl0s^5W<+u->W_3qeK<99m
z!A&TCtXI*Ns1AKS_Q%zrzJ2<<g1++=tz=^biErpqJb2sQ-a}x>U1%v2oWoJ4!tG9&
zrsdc-emOeLn*agG&ae*=_L)@fcx5s8PdC3sqHLJ{b|FcLC0sjErZ4laCd0nOM_g$6
z*U2PQIq-OIcU at ab%VvbhpEh!TnI9Pm3I;s<wo|L^@vNd(b|=P2!8V&*bf$Zsc$<v?
zt<5Y)lwm8zW2krRxIMA=<{Jyttkr+Hra$VdwNTJ&1nhO;s6;Xq@<bV)e(l5s8Nf2L
z0@|*V_|Byi3&^v6o)!O}GqHYN2g#db(Y2Oi-h~gHOPGA>OK(YxkO at R>>Fuu4ZLdCm
zzV9s~krTKOvhOC#_`K`at$Vm+rzH6AKhILCL-;#f{QI0?l9so#O|H<*-6zsZ(q>v?
z-``Zr(dRh+Kt-l|+v`07?)E+Te-4{$%0~z~|F=QS|67093=h`}omb?mE8I~-BlEgk
zC6T-}-;KuNt~j}vBvzBHCWg9nxivOp1fsQ at xBFGb#>BkBix+$#6U^x;H-Aya!a{S-
zEO03&Il+2hV3sMsJ at xKvC8dmQYBINW?rIaCpPt0^%6lZ3{vd^h9poUvnzZp%KdPFd
zO!w3LcaE=*?lviXrR4k9(W7HsYnD|GP2eFgY#6;9RfOWyKG~nigTmE>r}E!zR6AN8
zb+jdAjS+{I!>ts4v#`+abNSa&uU|Duz+`UQTbS+ac0_g9R!2Wr6=0lT0sR|X;R9)T
zSR_shel at _??bG=3rPece!!^GZt%nj;#=kTeIy8SvKVPb(??8FY{jq-=Jw3BkJ0;7!
zS$RA7UAF}*|GfO0isZ13eaC)xHZYZuF1z(2KW1%tQI5zr*58LkOZB;6S?cbRyTmJ1
zEj&Z3f_(pa=(@X4U3-a{d(&^F5vGeWh_S51x4yhHBUSm#oEy>yxu!s#e`Wt$+V#JF
zE5OHbBsK$&f==&y_{flhxPQI)QdKoxU!DhmfhTu6nTDAmdM23^Vh>G at ixM^^TK at l=
zH?~<mn+H9P4}gA1KbwZS`fDnr1Y4rlX~Vg05l0_vR`d;)OSR2QBjrN4DVh#7LU{^T
zq-bbD5#$P at f|;2aEsPm|bc=Z<@YBAm8)tzKo*Z~Dx;7XTDynZQE0bSbtl6$6(}qUN
zH*lt!DmGfeB4UFGVnsJM562fn>b@`eRhimx=;vd_F=y|$n>L2pAM9IX!}mu;A^9_p
z9%*VBDDiM0NNC4>$ZB!)W066u-|NtKZw0wkxhTncAd_Q?)8-i)8vhMAjI9;4&WJ!z
ziyu^AI`terr9toZ)2BuT1~s_Dh!l}qP at w}KSt-rogj?!u0R{%<dBn-{l*0;<vcsfK
z%c- at bj;P^>3$RxzT1T at 3!sG=#1 at H~9kNO<}n67;uC7lA7F=NJn4msQ`&X|_)`z`Ra
zkb`<R0^sif5Kj1P0WgpZ=*~l;VI!#~>l-D#g1e<>JAC$;MKC3mUK~^u!kOnvb<n`v
zmpPa)((rq-0YyJBDI)Gf%kJ72m!?~9T`#vUJUs59Lq_4Qh?o!4{!#Gh47-A^>~w;x
zsE*6Q1`w5`wivGgc;(4t2D?VPrpmA-;Cj3V-8Ck^%KM_;RGm!M5L0evX<r%tYvOKe
z*X>`s44h{ADdH`;lzBTwQ+!GjZBgWaXEHLRr$-E5_INq&okW=9!Lm_1l-jvHa_<@Y
zsHp1aI=hFvCb)VgsM*yJp(61bUaWvvMQLt5Aq^-Go4)JyQoJq57#u~-7DGaOrbd5?
z at Pbwr`gr<U at +!{Sfr5^<w93;QZq-=K85gs$10S!&m$Rq)B5w+%eCSg}kPHCjyKc!M
zKE+cf-cVivpW?FPNB$;IkAneZ2I8JGCzC^*{4S;-qwuya(?&0k+@?UH?3Safqy(s9
zJGBa=QhR&C_=_b2*u>;_DS##mBI7yFamOCvs11{T?Ho~JeOgi70)WckWk>-t(35-`
zR2=Bwvb$zYQ()Ud1FfUc)5exKTFjjJ7`2*t-eZXC;JcQTl%!v-whXwwM&0kql?DzR
zHhC4zdwx{<cJx0JKGKu0c@{8>^aG<_t7~e6>ZMRpTlMVLt^WG at rxbg}Z>ec#w_xcZ
z^E1<OMsu?0mDH`e2O@%QspXwBif>v_tXEP|(Y})QJSj=-slsNpXwzASpO%Ji_o$p9
z09GB<{q)n-RDi%x$aE~7!*(uzcx)%{6JW!GMl2m87w0(aV4U1Jy&hSt*Jjefrjis}
zB}g3n8@!34YlKP-{AXfYDp}Bs^eFOoF-HMAkuySe@(HTtJEhH#y~t-0YMvq<gK4FX
z!u%9Uimn9B(jcl{<>V#EffN$PVA+5V*+J+{?`2m=NyLD(Ns1#Z<7=it2jaq7>54HS
z43s4onA8aGkl4~2yn!!17pGsXX>PzvjzwLa=l6XUH4C{?fNF5Yz!Fa@#FCi`T-Sta
z(UUYi>J-2ur%cQx<6GMl=qGrBBUFf`#!B=JWz at DJZQfw7;sN8#&G9K4pdf%4R~&+`
zCqm42f at X>_-8b8fe=!?{R{XsRr5sTV>E062E5ysQR0c_2jOPMy`9^8la*K%90PCjC
zjJ*Y<2+tj at rx>pRWK>V at 3gV*sU(zd_>`pL$0z)O06$!Q>Ro#Sg096qnvkvNb0O&jq
zK~5m$l_snZszH+{KY^r2SqIDqN)0DhC_Zm9SN9X65Xb9?X?dc2phP2 at 2Y8A=viI7y
z3#BQ)TelI2fw6gIWg>%5rn!LaNnASUm&I=D@#|%uLMnKO7sB4D`=ParO(#VV8t<hq
zF_f?QP#eggs1yk72c`t|?}CZA5WzII-ucUQT+K%Bv at KrGjQSdXZ`Zy(z{v&X8`r#q
zI57G55rtBAmp42Qv$^IaA*&D!f^6ZMAG^(9zmBo-Z|c*?(V5nNy$&b|mC*=;h!Em3
za*|3t`F*$Rex1n)G1l?ZUs{#(4cJk-<pUHm at EW^@YPJF&ws-HjjEv)XeS}VH*7wJA
zm}D?&?b}HpwCna!06+g|E?UYZnVaW)3(Sc#>NO)i1wPcVi>n^Kc(Iv2D9u1|=MH(4
zges%gpJMsRVS4?K4 at J}4Em*cpq?I|T>KYp6PcvBBWjfladGAdS`xr_4MAGrBtgLrO
zz3Ev%<RES<=RM+`Ve){Tchi5l=PT08q_Is%Y%TM+7v&TetR{UJs=wA<_SetxVgjns
zF9SnE(RV;Ss!- at Bh>5R?OR`yszx%r<r45{RVEELFi<d50f-3l6!|`Hvj*E+?Um^<|
z|GV>;n2C8_yJNyH*(PT8b)oN6Yx63u;bqqT*EUjR%FzrZIsWu7rq|jXsjPXtJ$sY)
z{H^)x4J<EAACqB~GnIkE$KvBD7flI7#Y at z1-7L%AzlW$a$8f(Oxbd%tCnmJ4D3V(e
zhxYimxYRud!7s+;=sV1rvu|a$oTJtQr6ckM4fN^7+vlfHObtzIGiCpfBY`Q}`TA)L
zQ;qNuC2*`#jt(clvZH)ZVV+lS(HO2(mvgT*(oqj7dCRJ!c$l6Vl40KXdl92L$&30#
zZ2mMkGiJ at dxd3O1@M?$Wyd{h+cr^tU7nrK+{GxTC;bY6B596k2E{(U%yRJt=n(eQP
zAif5dcaB%=){P^3MfQ-jR*>ptOR!rJ(mc0GepC+ at Vz}Eny1euH{JsOrK6g!awdrqc
zJjcx&RuDRp2D%U%d$?vtBs$qlc(7v9c-N}B%dL)9EDc{9?X?u|%;1ul1Wa*LyQ9st
zJ at Ny#TJWjkv7>1VcD5-<4-Nmz$YInSYU+C*O()=iS)LSo)9ze0G+;pPWQ*9t>o-jc
zh>X`BTc}Teu$Z#wwPMAJ)M(>M_x#&ZmlJoX{_AXRNinO)d6HefA`?6w;0p at _)<oP|
zsOt at X-F2}KtU4HtNwH&-iO(axmG*N9e_GzP=4(*M(<SOR1g|gu6g4^EV<n>_+CE>Y
zh+<6B7tDiKYVOa166|NhuBlWR(_(UD@<V5vcl^!1%nWRXUE(Y9`uMF%mO14YIwrMR
zp&Gr<$v}0d&1YNrPugp`z2~Po($PevDu#=lolh-!pf)wI`=qSJBPaK;mFa89O~jaV
z5GBIX1ZT4{&L=-2X0lU_7(B@|mB?w*up`nJG*dBXYoK4EW7Z!a9h}9PQw|M4WL?Y=
zy;?-)r;>IZ^d7y;I`ek<gn}Jcc@@cDsGZC)@b_<5(ar>Ysy=;UE^j*V;E?fqcw)qs
z(2+zrKm=YL70r}fuh`~^F>sdO+JQbLZlAX_jV(-m{XvQUNhMxPNn2zxi`%|U0d0xo
zfR=J?$Fz_OtZX&MopHS-n}5u!*k)ipyNmu=^{8R>$IfeKTymeVu2LP-H5+E~wm at 1?
zUYR!j+^t}qB(;367d7mdPb!n_x({$QVd8nuRhN%kjFPH at sR4NwguI}1r`70TqmxSA
zPSKnpcSt3<xojhxHundlIz+=Y>+di-L6 at tcH*eBUW{TrT4fMMA=%KZ_Jqw#}w_0hy
zZ<C+I^fb{pwxdIKJaH at 1LW&&@f?MOPVR3?{!dBX(IZaU_J at nYPb?Tm|nHA47?@sg?
zU6j?>u&QEP)a`ZQuE1+xhsp19Q<MjrbU3aaGtu|Rj522ue%m8kDTAnBP@(+=ni@|S
z)8m=Ky&gWcbCsUHFgiNwyMj5<JSTXjb7l!g_BS|A7jr>%hFuiZ%^=DrHIQXUfQK=u
z?La|5h at S=OHE3!8qfY*x>dri>=k at LP+1t>zMaYyf87eB0Boakb3aKa(QBo2r5y>XA
zvQbeoq`8DNDGi1)G at x&#P05%_Dy1Z$=k+PiTEBDFvz~R%bDne7I{js#`h4%tec#u0
zz2EQaeR=ZCvE3qeI;Az-Bi2sMT({<0=(^7U1XD*&L^=Ld=ysGrAgBp?F}(Y-IR~yS
zdPMe3z|}rPJo?twHlCU3voyHwxvf}B+9KUP{?m8x;N{h$x(tqEHF)VgWw3gC4seze
zn}xg$yp}3JRBVx-2veY)8*|<=+Ard}U0>d~AwMQ8#X?(0$8=G($jimytm<Oz{*6g8
zPx|s%2di&h9p<JGHE)3Sf)HEPb*eus2AuGnY$Tc at D>!au-&_{z8zHIPoG|@v%cB|f
zAD<`2d|mq~`YI}=mfF%~;&DvFm2hqqym`sC_DfPeTq&y<G<@>k9$Qf&vwE>m*f3z&
zDAFn_=k-srlNFm1>nIZ{Frh2xJOeq#enju-9-L}yIi3B7&5Q2lu2$2V#3!k8$kBK7
z(_Uw5OVsutA>%)!Mjlej`Z~BU>fqI at PGPxBD7}%I+EWJcg>r1SraO~>zU(d-N72zb
zNIQ-AX*%rbKLlDd@>7|}!V#yg6Q!-D2aMJqu3^5&?$J7ujj-P2fB4 at hqE8;!UIX)B
zdiYub7BbQ2^KHAL2xK>pmGD1ddt^xnZCTRe3ZZ`4Co7b@*k?(8(enend&aygz}B&2
zvoUDrnE{!U<>a<g2T*|4Q04l467$u&XEf&~<JU%~FV at _6X)8L+(D^$v_Ehy<eWug>
zZ8EO_^B1xRsOlSQ?jB&v2^t2<ix+&Al>r!q^=L5(OmjR`pqg!S(xK*9b<y3@(whp|
zLaGX>hYK4?mFCJm(kds1i)YiOoO$u$Y;m$H&tdADFCKBoee`Icwr|FZ)R`1~XHkkY
zJ-N_tBvI4Ap}+P=DzqbirH^8vFkrdKx^TA`5`F{6q|HSC;%l28h+bvR)cuWhr^3A9
z{qel!xZvmD<1(!N)hnDQ{vtOto2(`_cCdNGX09=zs7NOTE{ii+#tU8!Tur9kM?ylA
z#71&-2PBaAb(KAt8mNCoMKQevG#Qy#k3SJ3G5LD<jjnIYH9Vr9G%48(B&l;CDI%i-
z+6j$~T-9}q&9TMEO`ArKA3uLZa%t4lsCyKPY<@^!lX}7y$PM0+d<kXhwQKB!gY?g%
z37ms2f?77A-`Rpw-E&Ex>^PH9Cp&f=MasD0T`Vfh59VUswXb*>dvo=(gIzF?5qX|g
zTyd{q+C at v<XY%06M-{Bz?7m$fd+TrNO`(9EI<*;9k&uuH#t&ARN;bw`lAK8cw%)>p
z419~1d_%E$VTRi#Lc1yvqf|0v;}O$iJ8PQqo<2>28#6W6p>hoyM1SFU`K2;^#=n~`
zZkO?*pPq*@d)kT;BFgF&1ppVD at o-D}y at WOfmW5kE>FNSBFT^NeQy0$PG_(t#01y^3
zF+rb4R+N~Wtn3`e-oiP2o;W&-JO!WFVh!^zdd)bj{$TD~^v at Za%G7Cv030%%t|X>C
z*ePO^W_C*2w!wj1tgjsqd~e=-?ZdNs6eW5K7p7rb!=Aw<k|vw59(5F7X&71)lwMw2
zv+qF5o9Yya$xp+VTbHef at Z?*B{92H7ms|`ytQV*@G!Sgo>tk&#tSdp2d;bS5d^N%M
z_*2yLEbJ7VDZHUQzBwCAS664QImBv!Z9 at t(xj?uSg~RDBKZme2r5!fIWNJh3>nH8A
zqROe#B5-Q++U)9jj(rFJg(~1H7(VDZN52lP++?S2nLI3E3)~g^?&OTW?T?M<QtT5O
z3-IW8^!Nq1b- at CS<Q4w&El at 7q_zs+EE~>|tezQs?Wj7t!ALn##C5C}9Cw&ildk+xe
z33rs8a^#@BUGg=$IMRG|;(bOrRWum!2>W61I7Q<GKAVKIAk=W~{ssGNyd(wXrSsP7
z{9e62UCFBtbTLv3Z)f+hs0R06B5|Xh+=&-6zkLPWuL2Q*G at 19@c%aANF0yq}p)sCl
zYXqgnePc`Zq&QsL52TwYDo($DCFoZIO7ipz*AKPMGK`z_CHB-&U(={z`?a?q#+R83
zBOu|Jm+_jH5d^rU=!Hi<I+X%fOJQN&=VKgqi+2%H^I_F;3M=hH)C{n<zCT?Ml4y&w
zT~NDL%}~j&a=u_9tEy`9Z5$qHuHa17yGux1+X?iPtvk?&P@}<dk6!CF+jV`}Ic;uy
zFG(PqUj9)%-MbF%!A(pV&BOm8<F9OWCD2`0B0W*&-V3RrEl(fX at qtBiKl*J(7Ej6e
zhYUjq6Qzs(#Lj1n at sGiRja5x5D4jz3S3bJLhr?RB;bbDB)d3L8;aRJNb8>!$n~`{5
zX=!d9nMJ!E12SG;s2{eKH!LVZB=6+r)^Jncst~=1F*=BMXnOfX0>?x=!M);o*FOe#
zd0Qt{zU#ALbv9?M!aLL=Wd5ExDFiq{^LpaMlEc?K<qq11&@iC8t5mw0td at 1-tTor!
z5KBh>>6<PqqSZ&&TY9Y5Bs5M5mEI<Qe$2WjPa;Tw*FFSPKu at z}ge$iHI^t_sU$iZS
zM=nZFj3+9*sW-U04#xc}?dJ~3x)2~VakI%Wr!d`O`mJod!BROXQioM3TlqjGB`sKf
zg^g4y=Xz#sRX6@~jRsGWOXPd$=l69zwr`7DPhf>;^Z0N{YpiDkmysF6JPOSsW*-;Z
zrvkf%d;NCKq2Gj`_l7!gwTjCqS!H}L+u!{3z+ktf8_QO-thAUpOSv}YYR1VCe^|+o
z1f90c6i7?V at 1BOJ0HPf`1 at G_jgOo=YGtW&>u)$JW95zyaq0QFM?+xz_v%ey|tH0|Z
zs<9d|Z~`=}@4&xdwN{v$Z-`6fj(!GH&Ruc;egvQi7g^D}ev5ZBr7ZGaOvVKT9&35i
zOuPWFhCXQlG|d|;sHEA5fVKOz8#vB9`AVlbX8Y-mYtnWP|9zD5vl-pa{Tz)YACe_G
zuN%BbL=Z98qp{5(UqcnN&>*-vXyA-)?p at DaS{f-=ZFET}C4(26T>8qb02Cy7Cp)_$
z<<FW}i4*DaPvv>f%?VVjLB1<Y<fM4w0n+MUsAw0+_C!CwEafk?QSxgOn6-!0Z;?zE
zQ9tbUI=^ik#i^Nj<XeBr&=ZN^#x%HCcmDjgZ{O^<ns!m>kZFP%M0d|c*<vM-z^cS9
zMKkug){nNA?T_;EOwySs<;S;LqOB6u6qU|0UrE>m^h;lJx4X<-RK}r0h80hINuq*c
zSZ~VXMS-e%cXzbC8=J2p=cP_Hm3Bhxj+jO_%l6UCiyE!@=nDx%8P8c^2E--E$#((8
z8^>(=noutPM7FB;Iqi9R at _s_+p~A9xQJcd45Ep;4ZpV)Vnd{TCHEg){4=DLOHU$|X
zH1C&0oVKwzx)^QOg%x9%)&%j3f7%VnJNS6A%Qm~XTy`I$JnE#%Js?0s(TOZDP9U`N
z3?nI+I%fQM*6d|&ZVbF-g<^>Gv>Ueh(h|#J7RwPk1()EQ7a47%mrD4fU&R}G7EPt9
z25<PRFu94QN410HK7TNrGv}|O<;wzhlfQ93N&1{hlMKZRz>&BfqOXjM7KZq8e7Hy~
z#D&C+BWbF-K-1a91^7Bn@(s@!SrxJns|@qQbE5Z1Uw7-7`g2|p$^^kW at rqmq^MVnm
zMB90xb*!g0aCc9Ye6z35tVp{pKMI#{sxHd9^z;L-zI?=|^m(RdJ8+#BerhAYWCNuN
z77ZP}bLr)!_tIS}3SKm%<Omj}1ZA1I46p*}z+-w$t*s5;hbd5O*v%P`wY#x`+#qr=
zIneLGdSZn3At8_QFok0k#kY7#!nYu6l^zKB^_0 at a^!@~@7Tp~N&`tkivv5A~D%wFE
zMG6<f$yL~_=oH2(7@%!VIM4T*+GzSA{O&K4g~e0T;u4{aSdmq`0+=Lu=l1Q_h;}S4
zYd72Yn?b8YUtL+!7Rp-|M#G8jIHfn6(LJ#Ljlk7{d>x_1bqR+ka(e)U{CKY_VpZ`n
z)4ldVMgQ6YU42my)A?PoI9fX(N7iuriGSx8hG<7zJZP0gN^T<Y7TD!)I*;`fQ8x)Z
zwLbNu2T6FKFF<&r$r#G~Qx&G{+>ueQ_-zwRu62Fk+OtVKwW_c0^=&<2iN}aOyOC<g
z+!#^qB!h)e8_TXb at dk9^(4j+xra4!Vxcv&nu0yTG4YzE#S5#2dUZmq at 7*}LXrm5hk
zzh9fpGO^fW4Hf;>^e at kmNPQ)v;{Mo3!cCxa2YC+jO$~(;z&$8xvG?^BhkhPO%RZQX
zRhwy|%=;I>;{Wx2<(N&EQ8h$<IK4CwWfup9Db}b at n0tp$HvQ&hV6DE(CvxMG&j9#R
zjZ-Q~X at ksfV&oimt7vM#|J2VrHPHrdaGF$BH=Nk1Ep9rZ1we&1>A=AHEQl%s6xW8m
zzr0cKVz_`QYHDWr=kAGmDO0L(CQX-K&CK*HUittD8CjMvo(Q3#yydbWL~-Lzx2Z<h
zs=Gn)Mc>$}`SBEJ^9wE(+ALJJ-Xs{JHWj%%&^`nj#q=G&>DL4;FBlS5TH#H?yeKfz
zK?4RTT4m5UkbVFDdU8=w#eEe_irN6<?3E1k`{XjBBRcR$78fY}<#%PCC{R-fx?D0;
z>Ow}xs9 at tJTKbalDB+=@K(VgWs2mQg%S3GeveK){beh8+Z(G=YPJ4s<*Lk3A5y+qk
zi!|KwO8?<=p~ZS%Sy{rp((m|h^wm(b33UZ|WSH{;881L-An4FGw;aI`A2$UY(U*Lb
zR}^%8MYDFgyJKXNnU|!&iy`q6eN2h=5$?Xf)vmEKI3a;~yOspiX%KEKo5c4T1@}az
zO+Kv2{fps04oDA0qU%j6xClZ_EWf_)ApvB+B=8K^LE-mX#+Pc;=C&Kg^>tHqpVcgP
z-01jYQ?@QJ6*>yRAo1S)`?P7I4>WewyU`W-D}om%hypf^dtIPJwAB>##)^H5m13=S
zFdwFY+fZM%feC70ZoK^Az|siY7~Xg#)glbnig=scfrilnW2B(G+Qz1sG=ulH=**-w
zhyY2M at PSkK8EFfpNB1h#(E{^{ODux+ at 1F<0v%}T&O;u=DXXno-B_%S`iM^(A8Uug@
zu@#Z1F%8+CYv<&20d-xot3M|0r7F|bz|mQlXBxFUtQ=vuo1EBYpznG6sCy)qxiJZ8
zb<taKFr4tskM$U+b?`rKGF~Sr^*Wo3b?4P6_?%F2U)(%l`ZuThP0!?g^|Ue%36M`8
z<0UWx4G=n$t>>b}<5L5%>X)sqfB!xSz&kB%X0t;bZ1p#-EcDbl6Ti|g6|Fp2QgZQM
z^$niY2}>`|UwpNn=3e6rqhJjm-xIn^(wXnWWvG~OHx0!z3+jY2hNXkK#sOimr>7^%
zp*Q9;@sR at DHc7RAktoy8LoHjkte~p3NJnD$)a>l}IguFLLFTyO*g~cm=D>7t*o(u*
zkC&tk)Tt@)J)mlQAoQ4ws6g)#$D3Qg<juv1g=}u<(U>arJT{XAvRUb`7UzF;(r%xz
zBGnuV^wyHhpJBEeKQYJJ^4o)j&Rk^}@ju!1af`jZJuywSwY(@kDT!fv6OrFONwzpI
zINn*rx_Hm4p$amnjD~HVI&4*p%<$S%pgt$B?DUPItl at gF8F=i-5$LQ5S67p+a at Sj}
z3d5lvX*+VIz}nsw*Ao&x7KGdfK$+0sfyy87zd7Y at IMD)Rgz^+KzaRQV#=q$e(Tw~y
zXWzuyGvyll8>=b@;avv7_>Iz7v!#^X_8fCChFFb@`9Y(GfmVch7!ka}djMnNuO2)&
ze at 8dWc;GtC4(Au?5R4aFn7VfjTX;^}bz#ne<MFK*+FM7483$arfGu|L!*yZw$F at Nx
z#_V3RaK7WABjthCvUPS%yFLUT at S*4Wl!^ieQMf(i1bgM|tSqn?lS`fN!Pi&l!}Tk_
zdr_8pk34n}^%OYJrDi{@^lIVZ;BdhCaahN?aMF}1;0EWB8VdfOSDgstf)z*gxMu1P
z;@S=Lg4WiTTpWemmkI^?7O9Kic6UBOH>|m~)Q#_;%wqVw!WQp&D`3a)v1F`V6eKeD
zD*@aQR5Wmys)_HFmWPA#xyp8bZ at 7<w4}=GNVhX)%{7 at 2BzQC5a(ZMxL+HalcS+HSe
zH$5;1`YNG}qTg1nBy0ZheKarhKkX8>RgDa9DkM>~J9mCYH-a5Ifffm8H at 9V;pBIe9
z5L&PuGLCWOq5wNUFrq$vddiI(>Qn|mHz_IUfO-~bJ64uB9{Ok)XEdbcso%w;;oG at d
zNT0U2xG<HZ&@8BU at 9SY!pqX=n-px)Y>gYfItyiBu4AnR_V_4b~yQ at vNHushmo2~g4
zVT&>n+Up~&ww&t{xjS at 7Pku~m*$iQLAiZ_;RxHl{m$q7~o7)^y?soi}Nk6?I7Xwe&
zeo4gfPj$n|vN+*8I+|7%pA*`!36z7hcd?!vG<qt8e~g at Y5@p|YEFi*+I~@k31YsXv
zCJd6j_<X^F1^*;$I3;O~Y=v#c!wUa4+Yj|{wD*6|S=-TH)173d821#Y at zjZ2`Te!A
z1h|=+s$b8z8pexFmzCA2yCwV<lixYAs2u%1NUdejwGRP&_|0lVTA2;V`Oc^0Ye4RB
zCLlV~9wlf-a_J$ZOSjk)iOFsv9(PQQx~lL<#pPIe3zgHiA8#TCpM*bO&uL^ohzwRL
zD<MhlQjMkseFVk+G82=~hm9O+dR9>d7P_t$e!{U^G_O7<v4bea1FP8}_2$h!xU*?3
zNq at jg=`PI85ZZNn^zlby$d|5Q-bn3vVn)yJBi{>M4SfA-9^+3#Sfl^iU!CDI=L{G=
z9Ln8MkOR8X=2p at B^}GURga|T3;jif8kF1myyxO}=*`xo&bEhz}^gv8xWED?{Y*B2I
z_yOlCF|h+wftzpjLW9}SUc2Wc{+{vIufJo8v#MZ~DKzj&>DB<ib at XR+5esC-D9Wuu
zS4H$NC~Z=&bSo|qhK~Sy2_ch>fOPY2m>@jV%^5s;!h{&^?*}N*ZjI`YqM<<^#>mg!
zXMztfn3Cm!F#KoH>Q`r~gbBxNp6>szWPJY(ZPfoiJnF4>hx+ojm!dyw`FI{Y`}-S-
zVM^h9RQAdZo@?hAuwhXB5k2F6#hYSmEK0v^m)cbRG{@d?SxJ6=l7H9ar)3stV^S_U
z1nLhxaLGFS&>r<H!{KQc%WQXh2GxFF{$!2Pr1iS19%tU0^0L0=vu2O4Z_|G4e%!IG
z<@PKV8i#nFUA%;5KE8U6`nBU1iv|DE>HQ}DtASl=wp_=BBX&_tTWC$@tD9s_=O5%|
z+o($Wo$vhjfesrtax<3HG{^dIxz&=hl6KoCrWP;b1}4ayp-H1;SeK<`zUMo?{V8H*
zXt*{aw&z_ZY^fnd63u#CaQ`6RZ-{#DB;}6h4Jt;gQXW<Nmr?eYvBEd*iB}oii`+p@
zS$SH-7IYopZ4+!>sW0znyB6DQh5;kxsjZrkzW(SFf9c3{emM2XpWVhV7IfQ(g<=MA
z9=HOEiM=Z8j*S4kd!eJXwKb}=br)L2Y^}pO7U5P(Kz!E&^S|He64%jc#s8*XZ!*bL
ze+d%>Q^E~!^^5SXXZHDZu4CoEzI`X}`ntKl1R-(W=-+$H?OeLe?%{6Z<J|u6Ib3TX
z{8q6DH-aTv`Jv^nQ&Uo^T{LJeXnWjqlJ~D46fsCj%7uoJm!D$bflfTQHMwu+if`&R
ztu!R7e60G!UyGA+-%?C$sE^*<IVNJ8x-sRMrFI~p+Cj at o%=PP{($W=C=3T~J>-+$l
zCp at uJ?KAV!?3jH(_G3@{b$4{<+LVocUT0!m-*4EE($gJJn0yF;p{=cr7isuSu+kEu
zIpB}{j0vx7e=YQld8iZD($v_fHFC$hzPvJ(&K+_qHl$*=kQvFV_rGYl(MlMvCsw9`
zYaG)-B1>v0BXe_dR$5y6o$tGO>E&OKpiyM+iWjBiXmIVh-Fy3V?$XT$C$>!z*6w)c
z+U;4PPfG96@*>%@eYYT$S}C@)bE~@S(fU!n2=8Sg^w+Btbf8-bnt#5^ghGJGDEy+{
zvA6g1zF1(#3i+PzCZ;|*)@%j6Szm6P{ShHN<twvhATQeMb*jz9_Jl-6MLomkCqKic
zV at K@iJu220E}EgRX6{O2ujI(La8vV$_ftvh+)w`<XX?N4c>dr0QJa^#cf8q8T6q1z
zDQ+d!pPhQh$H!>Ff at _t&7jK|7L!9u2EUf#!;ED$3w}IQrO^s2C3=LgJdck&8?1NPG
zBTV8ldwnDCj#s{CZNN0ARd_TV?oRIOrDB;+)$a6Fhs>bz51Wtj;7H&;#kXlYlgwFu
zuyb1s%LU0{0+-+UZo>>{PNnh}#qT+zVxvzD?sq;rcHgg`z2kkrdLCDL6ULQutDnso
zg7E}^KYhKvyZd7|5z}-mHIk|qW$|BH4}I=*UO7GwFp#R9<EL-a9&l^Rjg%iPBc7tj
zeiq<j13dHd^SebN-Cz4y?0@$T-LuSExIk~UPZ``xn6ZYcT3$Zt@@4q1lceg5QKvdY
zLL6Fbe=aph@=|K51|nln35|1g0I1+yy}9jr_x3q*#QoFl9_N0T7IFxzb~Vf+k%zV+
zSAY|wyoA`I-JG5Rjp!U;Y{A`)Qq9!V)Y7u{!-o%*m1sn?tg{Xs9N{jEuo`Z<z<AZF
z-9YLfmLFU+&KZsOdSai*dRfG(am6yZd2KGHZi1^2NCaQO!7_3kUwDd9-8W8nIOFeg
z%HbP$oR_;k=hGP|fFzIvP&zK(x*ij*h1FB4pN3J_ERE at ffLR;}u4u@<lBZ9VR;4Wu
zDL8ZEFKLx^3oI-woSoxC{MwLv+(!l2?nyC}u<<iSxp=x}XL&R;E|9uw8*>IqA76<F
zt~CmbH;OprQ`P(pu&o^G#dbYBOA7|%cl<AP-}f3|+uO%Stw9!dh9Ou1kzG2 at q$fJ(
z_^fYo^70Q|{6o!RnAnRkk;B^QAqCqBO-#_~zkZOUBu>z*O!@WGP2;Dpz1Pbi*Y!*G
zL}ld*YK|7d_;s~es2-DQ8P&6DS3@=lT5`}Hh5-v0(W-R&?5^t|b+yG~&34{(`lBPr
zx`?gsV>9dfCmp1X{w- at kxS%W2Yp&c(uy7P;x!nVX3<)@O>h0o+RWykvwIop8i;`JY
z<+M+G^~3C2p_S*Gm>?lt9J9(k(Vf&dDd^nrgq}9kR2cn^zn~3fis*o_gjZWp<7G-|
z+}mSgz7k_d9~0Bfz^S0$97C?42Vv;JiX~MLlO3UAq<_}^`{Ok<+$pCh3ODRn8BzdR
zU6A_u<YOg76BTEGR=kfK!NO=R0TD8JS6NAk8~D`L`8C=@W~|JELrAFY=F5u at wlUau
z`x?kPRq5G88nS)kwI+0C6ICvchUTcMsm*FBb8eJa?&8t}n7ZOc7wKLHpacOMa{gQa
z_Jyy7`+a#3$Q1r+*3VNIu{JD~3n{Ed_WbS$ZQ=k|>gZl{boLdsAflu=CJ-6scF5DW
zJ@|IiNTlM67l-SX*80!J;}@Q}2HETHa5Pjx9t6ryn!3<Du5q-cre&;|fh=u}I07gG
z8X?k9GO at B^;C+L@#52J$<AAicEk(BfQ=zAF=HBGw7RVijVVt^f!4o~Ge?C=B8g&uK
zb#DAOOn4My$F^359Df&IXrD+qJ_|E~-0sxqLOUKf_^<(*2*N}uEBfaAQ)$ip^5bVq
z=7p&a{@>?M-qH9jDR|+QEe*)hD-^(vkeY(*6xB3?Mhn`h2C9dWl9IDl>0>*C at VQ5N
zIsx3kOqA1a5kzf*4e9OGlL~$!Rb|f3iIHiI9H$w!DNv0DW4RN#AHwR8h?9n?6vQxt
z4T)K!#(tVVljGtF_7=v=PWRmb at EsO<tF&|mmB!rDk7u<paB!3MA+!J{W at dp_!XWEL
z!<|5)0QiQ<0t<z8V^KLS8=_uvG at K*i<(EGLFBujTaLu#*Cm~^hRvmbNxk;{_Di?%t
zpgp at 4*2O0EjUe`OQg^RQsXXR?P-R=j8AX9jG?j~YdO550#AGfasu<JLkleJi=t~ff
ztt~D8<?{<9x7$i0#(OOT8=!L0&%S>8u6HY!%B?c$X(M=c3WC))5EsHsW22XxyN7>v
zrLi(EDD>RJ;A3NGPa}NQezCxivFIoF&D8iOFic at K>Lj+chHd$SdmTW|qL)aLVWBv)
zdNX<M-zRTkLQrtYr at i&DXJ{{@kOEXPw}O;tNDbiWUF?yS#mo6F`C^^a(+2(bD5u;&
zl-8D(FY-0u6~A2d{1M|i&$}}@|9ESNP5`bE3zFBd7&im{+E3g5OVT>=*T`Dx+P{=$
z21(^S0FY5sh$yV)F+vC10i_OXPCV`(e2f4BDHSk0EL{Oe2K#FFo8IJJp_OfsCeg^Z
z%{3m<JfuGbtGlV`V{*0$ki68FfR|xON!u_-(mq6?z9OMlD5s)aZLE#PdoPtERtu;5
zGM~)~zsDwX5~v?%WTpi4wpl5dVTrkDaxaM-&u3<~gQ<o-xVwwTZbS2Z$vBE2!_p3m
zU1<Oa1Xh_CX+UQ|xo5kFj8}o(%A}0}^E_%Vb07fk8uwn at W_V`O9P!|i8sr<Lj^97T
z5XRh1#T$@Xz!(>bQXZxwO8v<qTReX;+V~$A(owS3v(GB%TTpj?e at t?;qM{?W*8397
zbxGtxnliqGhmV`GbNZv~m4MsG4`sZ>d-W2A_2GHCA=gf=Gar63;77x8Pp)*7U%;x4
zFK4gwA$sXQJ}W4|z$Lkg*AW7#vJn?2B$UzN^)0LaB5 at f&E0pOQH at Mww1tF}z at wWHp
z(p>Kf*Z$L-X^94kUoPJ8>29CgT-Avz2n|kQBU>6Pa=mp!2JAZnNk3b>psZ}=(xq#S
z+L*wJ<n2$vf(={$)f-ZXB<-*JcuvYp*Rjk4iRvi>dJm(nZk;6_bH7@$bHk)w0^gRI
zi_48-`=Si%?4BFibYTf~{7&KPkY15%Gja4wSA!VaVTEw_iuTImt=-ehT at 0!lG_?;|
zeSb6PX}+O&uvrXHoR=i<BU>rnJ*f9-jHI)ti30mhSa?ojD&vOp?)hw+3=Q>KP|zfm
zZi=`0yZ4-qa_3_1bPQz at c8+C;&hE3<2LLj-)Tg)fltDzX=}l%`?aC`*Pz4s2kFfG3
z2@`MNSea`c`urSQ7s*RdH;vAYv9gNl{j|SBJ=g8o;3_FUw#YuQ at uv6XPyehv9`H;Q
ztc0%Cns&^l9EI%8+Nf$P(mq9xGiW@$b at XJbTr~PWmWy*v@!yzIF;L6#i at c)Z)WN-y
zj=gm`rn{CiA!*H3M1h*rYbq68wMrd!?V=1m at yK1DZo`_M-~Q%sTis1%hCRfZwSE2C
zOIlTK+&EkA|IDAwSGB&r+DF)f3%`BoM3~<=QU7h1$7$7-sP;%Xb6qgUtM^zI6q46b
z8GqD`DEvc)a_3;LA=YmfH_F<&YFI8`en!^U;o+sq*s^Oo(TOtIgIo>d%W+6f%1S79
z{LsYX(8I!kK39KEMw-1Sv%9SZF1-#{(~|&PlMF6>sHq9-vR at LvezUwv>TR?GA(EqK
z&MZ4pcO8!nKmFpmON!ab;j*$FHP({~?&zK}s?y$yXAh4Nl8A#xj`ZvyKOSV8Zq?I@
z6{udq`jGWh83*SHs;fTk=@~B~9xvAj-++RF2BFs+>UXjVemO5+YN-of+p&4aaUbwG
z8ref^tR|hi=H>xmQ&?}mlTxiE4>jmm2d}F=e|qnr!iIl;S<*v??ia}8q&{Q&jP|Y;
zuUN;u0dVzxVq{8y(C#vl$1L8bE{iC;T4&?Nj{tZx*5z>>C6|tyHq8yHX6x21a5Rkb
zib1zz98)~4#@N)<@AT=@fr0ivk6x-_arz|HznNT_Y!P*|TIyGoI9>GHU(wMDr3X)%
z-9B`oT<@cJg at p!ezG8452F+fQ9BYUJvp#Q*;rD_(GB7ZZroOQCZ=TQLa|Jy(27oDa
zwzNHa{Ja*4<Fqw*yhI}7&pJb at Tl4R{f2kKzu$-%W)0BBi;qkBLpi31KOC2U(5P9{g
zmRntrw+`<2;T30m7GD`FZyM)wd-a3Ij|XX&?WjD5bFbO)w at f?p^IeHjRc+d|(ugYX
z`LMa~5jnkt1)F~Om at 7RE!qh at 9lGHexAmV0#^A at R;GmrLm6gaa_JA)e-jKmAsVCcb<
zx`JMi at vQrN9pvc&aK9HlKoG!U&fDRVe0k{YC_Sff(NR$(PH{RZh-(ZM)p{R4?#U0C
zaWg1kch0^0b++r*pM55JG^p_KuS{(#6FX&U at 8iL7O7U$~vwL;YHeScL5m(k!ZdLT)
zod^N$l9{7p?UcteWxX~#JMa7$cmML>+s_^@DWaIGU91F<{OwZ?vvhvWuG*%jRft at I
z8_h!V0l_tY<A%zk)pP&-eept2AW3NpT0^p7v*Vu$074}A?sBwdRD}gX^9oo&#n|RM
ze=09XuHolAwNLcl=Je1`^*k;yC?}>=dN1)=3$QO58iGS4nYjiZZgM_pjFQroc!xh^
zh at Zvwi3N7MXk?Ea%9LhuzQVkFWE at 6boeR4xL9koyrlg$SWNc}9Zh)+ml+=RKg~&@G
zDu+i0%?&gDL#9{vyFws&^t-vuNYC#LFMocSCgY_W61OSX8xc at G7oMuBYDeuP2+i=F
zxMnl^<`!q?wiorgsjh08;c=4dB5apT?+|7VaGI;2q?F`xe<=ve2#=;EGIJT6gxXXw
z_Mft{G_1EimzK6#YxM0*c`TPuEFuP)=q0G~@S88NONiX*>e`Ht1K`UQ<EZi-mBZzK
zZVuYo56-*88S%)`qX#91enC;5SXx0OBBR^LcS at 2Bt|f&R#e`grhZDMh1p}(u#uK<5
z9>c(bG}P?)hD8Wzc2)&*Y6ugj)SS%~$xU38w&5ewQ-+L^a%!S<EA%M``a6;`#d9Jj
z&$d$f%G9P#B^<rDlxHN~z%~$;eV}VxWwy)cUr{U)jzZ7vFb;Z)G at DI4JkkS(qjzn4
zwXcu9(-rfKU9CL9 at M}TuVw1}QQHcm;u{$UamGHRoy-1pe4;j*WyT?dz8SHopMItiD
z5uY6rttSoMbmPn=?$#qmg6=>ngsy*s?R5m8&inSFb+lUZiH<VA7*q4ZwvAW9uuXoF
zcS553U10$zjVw+tCJ<C1Pd;U<j{V)|X{Xa0?hU0`qM!D{3$rwtGxYt)wwq at jWr+(1
zU#$l5v!vjU_%HSClHUcJe>h)JegXBD2Q1pQo4ZJ?MN4-gez(ovnzxlrJW%^<TiZ}?
zT?!_4-j1cmA|fg+-Ci_fF_ZzV4!>Ut)q*XEuraDPnO`cf`%?G9p&%+zXyZHk;voN_
z<lb$@VUL#xE3BUQ;VX)$1%g9r{>QB!isZd at Wt&Czi3m8R#IH3se at 0n=$|E#`k9_U$
zJ??b37p|uT`I!wbx3>5BQ>UEo4|iK2yL0>YGHL=*C8zStbj`yF3i{%GrKEgMom!h3
zx9aNY(wEMUHIY-E`Z;EO-kCMF)7w_&o%QqohA`x|C?o0b@(EXq?VY~H=GeWCo-Qns
zok2(e9SOigm};$<w)ghxfB0Zr#+;`7=V=6C_w-pRDqE3wPICw`ixJ?OpZ$(UM at P>e
zv16|Llf!htD|@yIj!^J?3HD}IR+(fGNVanpeK at D(`IFeD=<(YjkDUB~DU~b&Qt{KL
zwJ>_nM8`_R51)aWduBscf1HS_ at V}W?S!_mCjN_(6Cc}mpLzWQsJ4G>Su3Di(81d!I
z>e^SrO at QjH!|aT0b81%dB?j)G5!JLx3J=%q=`wE7`H7a>ymhA#6ALqw*<CaoiC!d1
zT60}yw&puw&_=@kTn#g>GPGJ+KO2tY65V=Q7<C0cR`V=AqFRCK1r-SX4?BUbF#ms!
z{yV9XJk+239dJi4`7 at O}G%Ln}e*SawFKA`bw%XyYPaEBWImiECT9$wmq|F>ZdGZ!y
zwIJ8ANe at iT%zpl;_q4*|%H;={st=jQw~jm~5|Wg1n(^lLL;Ceo!OBIj(TI5VY|v*u
zKINf(ij$G}5>r#b_U;cEj**&xdY8<NH9L+k_3l&Y-kr#3Y_YwNyYDvWObmbjXG9MA
z%j2|2>Wq6!(|lodp66hF#-Cl?-5itoy+XP1M}cGVi-ALj*3=6M#>WI-QhX$~@39pZ
zCBq<d(oUL%EWh2m;`sp;?L&0bLmPNBJ{*r2)4#`Q31s*r+I;H>Z2Mg+i=U#C+I{!_
z{XE#i=jv-uka_Ywfp(v$$AyN7S^<`1s{~f5<1Dr9<q^|m%UbYI=Dy6Zv8$@A9E43>
z- at dQw>Q- at bOifW97nq$r%&ku;!*{H4-}R7#2D=wl`Dz=Z^k&Z71!P8n1FJz8DXDg0
zhhZdcyq2DDV7FhO01}Z5shos&{M;o=w%olI;>Qsn-Fw(}m_%;8=9y=Oh0uMC;CupX
z<?=?s&z at H&sEt8bB(;0mSa^RabAJ5LAYfBuyz+aL9zrIx?eX)jprfR9{R>XEE<C8x
ziM~JSvhig`Xkj&h`}G^^ntjT}_CinyJbPC0-0a=Ee}eTG_NjaQdNK+oT(Dvm70#-#
z*kolNLmC<yI at e;)HMSd_f~@QFUE0%x;FV;s3`D8PJ$*okK%|SVK9j&p^5w?dVj({U
zjd*!E<idrQoW1-YVW1Y!V_vHwThUNo-`-7U at d~ysSx5MViZZZ}ZhsC0z<QAW{J<!3
z^5Zib4*^xg*8yH|sms>)u{Q`a_6928UQyhsS9;n)nw}#t;^_ls)LUm at Ow%|{egf(<
z1W0E+s~4_q>&L~i$7p?<{*WF^EG$s51u*Xi9FbfZxe)zBG=<?DN~$h&?1BOLSk)bv
zU?atUPNl0C$ccs-)Kr31K7aBr?_HP19PSHvWBK{H(v`&Z^WlR%+Fx(ox9k#0$w`Q)
zdW_gUN<-thzZX+T>hZOan>bN0`$nGOt-BT<PYfkUWr3>eiAU&hde4*%Sao&LqD5NB
z;%M<i6ii~=qt{?bvWx!xKNl at sgn!hw?ek`=TxiqDS<Q~PX`>ymV&7XYmDz*VYxr(?
z8reZ*iQS6&MG}eq7a2YyK^B6JXKA~jX%t^#ZXUHsmV02r1cU0<-y}N|OtDQ}P*MoN
zyvCDg8v3@`ksjqfRO~sA2JXo+tnPf6jm<=L5M7Yr2X?A~o1%*C*#IA>Ob`q2e9AqA
z%t~T#lC!|W<X-zfrcZ9jYj&`O$v(h%oZ$(Ye~N9EqM#U;F}Ab#S%c{KQj?U}tqs4@
zSTSVJ(%!lP(<3YRGQZy9N5b^kM2Jb?@%w(6djF>c=zqYleAUX(-+H}i%4=Z at is{WW
LntMfi_1=F2Y`87x

literal 76189
zcmdqJcUaa}w=GIy)L2jxtTa2KC at RvcC4x%tNR6T(z4xj{3DOinI*3SbA|Sme2nteP
zdKaWO=^gG^_~qWc_c{CAefD$iKbJgDM0xqux#k>mj4_w1l!OTNR@$vpR8-X0ul*rI
zMYXYwifTj1ubc2MVP9YR;g3zXMMeIgS|k6x%!__bMRkbk`X86%tb<3|t<2?SX4lpf
zPaR7;bbQyvT at RcOJqV{O-sI=``}WZ%H-3{lJ+P<u!QZwMdiyq>tQ|{#`d8GoEeC)3
z<Erx0Q{r7r7pZ8TY}w`g)YQ?b?YNL}<uO?aw&&mN6FBq&1p4!;D!=`5t14h+_Wbsu
zUAT_*FJrgl=xzV}<t6*euRH$r7w3)lGB^C|`#*o89sB1qO3sh@{`r3Izy0{KfExb2
z<IeZ4_lpyy2L;qNQ59ZNd8aR(sGQD^zu-Py$*(qE7Z;Z|HGLahPDRDd%*EA6IZlqJ
zSYy1Is<1fWW~%vk-kfdrb}DCv(bkN{EVKR}zirGwF2X<NW@;2Ir~beo8x at u1{KA4w
z_AmJD!c9R at Ka<1Y>%Vlh|C=}W<KtZZYB`plOG``pQfy~*CH=@v`P^e~`)U2WR8()M
zsIC6>E!F9ZMGXIZzpWbgMrHidg*WS;bh`Q<f3*I=!k_=ENBSQ>?p(0`7CTNJJ$fZx
zA+h!`HC>wBoZ)dMrc-Cmh&MMkZ{4v&!Go5gF4IKws<3dJQD^?vojcDqELx5<g{SK^
z>bAZ!;5GgBxA*hs7K63Nd;9z2Z}^^yQ_ss*PS=h6^y%8nNV9BxoIFdzBL86)7EyAJ
z#hKxB&C(smj~_pYb0{XMN=r#SjZ;ic`u^P*hm>f~u~Nig1=QXi8=UKOYJ9M9+jNhY
zknY at AJFnGP@Y}a<<x*~6#X&`X`|Y=(+DNy>>A{GXFAqujsk~-mW7|zf7vEd%r`MRI
zb^{S(Xqa^Q^5xx(j7d8fcw=z=L)GC|QtHjSi?@9I_)%wNab|I*QNv=ajRzOc!p<&-
zOHlA*RolI1Ph^yM&|VdBJT>P=L`|XmPX6!Chd<BHwi=x&Z+?B9=1Q%FSBVFm%8Rw8
z6wSw8US1VEp$@Y*{U&j52O at +$*d9E5XkfZ`dY~;U_1V*>e>TtE?W>IxEfG2BaHlR=
zqcgVU=M5V??r+#ki~BVj;E$FJvpiM6=e0Cm&^g+8TtJ}R|J<zy(y=nfqbu8SzMlBx
zeAA_6r*xYsEy~mxjr`^89vN9#j}xKRAHL7cS;cfb*~3C>lsoa*1TUjpk5%{l`SVeo
zl#V>RWX20d9sCh^D?9S`Vr8*$8nz9X3h-Htu~*O?Jm at szpO(h1`R&s);foh9hR at 8;
z&+otDvV)^CRA9Ja_?!DseLS7F`|H=QZ}XkN^N`vvT!#M_Z`#SIPs3;Z{iWqto6hxB
zfB*dl9^ax_Tk2dJlVdD8H{D at 39((;cQy`C76st!5NZsOi{*uIKOFCtKqQ^HZY`jic
z<g{A0oCh6Oga3KW>CUy)#@KWc5n^KQE$<BC4_|pa at a^;S7mfWV={WVJC{f}w$xbVx
zgM)(-i2}x5&NzQUWe6V&2S at tfr`R)eC`|2+OQVY;sZ~BfLBrL7+xD^E>n?U(>~=f*
zBs04kr%e9ssPMgk>Tq7OKKCnn?~FQ=a>nyj at W_Op)tPq{{?u+#$`Ht*_rlcFbgMwe
zx$PA}T#^iYmge(zWbxcMN^;5Wl=lxemt#3I<^TEqXVJ-^-mIAhmHKQ8Jr}b(ckaYU
zh6&R0SthVuxS*DF{Onmtqr90HuOcEC3}5YK5)#s=5?o4n_3D*RaPWu%D<0CveHsJl
zjq0hdIVIiP++-1ZZH{UUNow)$3|dc}KVS2zZ0jsVQfM%LX-xLUjT<S!RjqmR-EM&w
zv^^=qlT%YOEqcj1U;NL%Xn5}LA7eL`B~t3iU}igtxT;H3;p*+}y{Sw?UYZO^Coli5
zk5`nmYPawc=jY^Xn65O}9_cL5u$vu8apg0!veVLvvYj3X#|p}kFHe7Q`sOR`Fo%Xw
z{)L4FTK0QSqa;FfFUd!iBT-C$I_kx3K9_RT+uOS?QgokMrty1k``KeBPQ>F0lvP%;
z)=v5Cj#o@>@Hr{lR(Aew+3t#99*VcEshQax28Pjw6O4`vz5B|CNOHSDyZ&T1q;9fC
zjwivX(2<<KSjKM1SyB=je#K?T<)Gs^2i8M}E<W76vq4eAA at Zn*C$oTn+Rd9cd2J?N
zHzcY=oAi`4x4WB{xF1l?GL0;<@IQdp(B0iVB6yINHtyL`5#8pucX`bRo>qnlB_|}D
z4&gSr+?rw3n5ILi%QDm6_{%Su at -7)!_6u)uds-RI>d_Jm;{N9 at VRcf*3)YhGD~JU#
zy at rIE?_Z1d(9`Q at k9~S})OIk^@5x(p4 at LoHr{#%KixkVz7M;m&pIdTmQau^?qP~0)
zi;RpM#IHPYb**`N_{xn at t=Qy()kO;pm&cEF+cHfM>p at t^z5xNT5h7lvSXm|7vn^7C
zv`3m!cpVngT4%lla){ze3l=Squx8d)JJ%?PdyCnTn|HOfS$KGEy6rowfCRa1IX_|1
zhZJV1SJvha_^GJWqnJ6xIkp#ZJFVvawtxS<)S9js>4>&6y>~YETy`+fs|#6;spbS7
z!Zp{2SNwWbE&C4t$}}a4=kk>+9>@uP`5E)`);Z}LH*P%eoJkxBmW{s5H#k^-`$56w
zp}x08kEzXKqx5**4&ITrnfSPGG at ldybb(bpSE*~U({ZWd9wo}7z2a=a+Nxc~P-=$G
z5R#Z~s?IP{3PYLAP~AzAbsitn#9K40 at 82@ZDV{f5ld3J*^CjTI#y(d!w+m%{XN|H~
zpNTM<WHQ<{j;DK_*DTo|5D>7jF92&`FskC?L{4E;EN=R{a2tTg#q%+$S#Jm1U*e%y
zF0fXgQF-TY$T&2>9Wd2jHH_uP?qG=Zf?Vi3gs{06YT8?-(~_oRJ5#S{5Gs28dd>2}
z6hmCUGBQ!kb4fv+Mb&H9{>Jj-%bRV{vmCEmjmPim%#JiGXBdXyIfW#Z1_cY)DTLWi
zx(=Eh6?U%<<}s7Yw_o_#j9tG;3h^SHs#T#MdSUw&niCRfuNw*iaSQcpIAl(`#jwK4
zsF9P|J%frs4i2+EF^83z#yHh1(`R-4*F$(MYEd!d({<~A_Hy&|Z1B@?)X6?uj6Y(r
z4wPl8gjOeZI?R7{IR(gczm%GeQ|xT+_XmS!xc7Ij_u`qnJQlwGOwQ~56^3iX#h9E7
zYu1YW>8GEbczRmiTiJZj{v}>?khQsan&5ob2FhdgOHAT{cX;Dhk#;O>6;|4^%zS-(
z?$FH5%_-X3=MLJ?n*eK_I(+z&co3(BP97K1(OEH(&+Iz2e^8<&t+*v4Z}_I&`TYCB
z(o!q`97$dXe#3g5zLDls at 7G!tfjToo^>I?+4=6m0_TMkfjCXbp)$*U>=2l8cN!j5g
zI7Er|5_aEzi-v3a6%EIQ$krKlgBCfGM~g}&{m;EmJMT1lj}|xAC432($oY0H0_M?Q
ze>D|r-o71N>Fehg{b<|1mf{?X;iyycal5lu%Y0c#S{LU(cI=NZ$HiDmh2{0hnHi3}
z@)fLLiK at 7@X^NzHPjc?$la_S7eshDyIN4}V#AJ`c4#~H3uJ=DbKM}-Pwas)mF+&&i
zBdQ9Op=z*&{%e1Kw9QnXZ%e>PlJ!t*v|NNRb#%k>RM;B3L3L2xZ~X}<fIR8rmk>gO
zC-&@M<d4bC<<A&iPkO(vC%xxvcgvVhohoBmt>EfpzHosOt2*3}h+O|fysgHBjbJ9A
zS^e%RfjQOiqi42GW)!T5bLcgsxvniwRqg0+O4sw79c|U7Nk-V0cpV%!HHf@~EIK>Z
zu1B+znp!?g&_T6~N4JidG9M=&uUe+)k7TNpsFK0z-FCbluO>uYHp5V at -Kx`pbE3HT
zkJ0AT(q3i2rn-2=v(b&|I+PNo7a<{uJ*8ebs_V(+cY?ZK?hoK7M#6ZFV!`KII+8RG
z_`%!8tU{9S4A1ab&iFf5gO1$huQRi>d0v8x_rj-Mi{>DO`j^<vjh)fZXk1lpe0x_E
z6{(6T-)YV9?%lgtKB<S2*!@IPfd)Br>pn%M3)s!FdyKbbQF?88Ek|PTu(<OoJLaB-
zhK`w at K@42H{>OR@)Wyo4sE?H`Wg7dU6fiQPPu3CVgyYI0PutVg!RRpk+Zk=9ZXb$@
z7?O%Y0oz)OM>w8T=(nVOW>;_Nv&{L>G2DbhWK0I;UH1ljXb7p*ij#}IZL2uzk)T=X
z$(rop?v5*INiXjWKBJswtP_&wp?_9Aci`V$#<!lHh)WMQH5d2v^f2Vpn16h-C#sa!
z)@l(?Nt~-#zauy6%J4Q#PPfIX3O0rmpzR=~ix-`h-{}u3s72n-+hmP2i~MYqS5H0n
z_us$z&2DC{P|eFx^G5q}kJhTcUu#xpvxv`GjShB4z&t;_^-wyp9!jYqj5fvV at 9Mbd
z3+}WIec57!GoQVmnT(7#u!2E1i$a1Fs-XNk{hPigW&4JXo;xRX|Ni~0zy2zPt5{xH
z=^Y<GD<o79zf(g)V_|Wzth7`_QgGq5_!z36OUd(Z- at Xw@#yNpioW<VvD(!qw&e;{C
zDOsx~y~P&3u=pcKj-0Mgq;1j*<a>oI7G-1{Fgo59gV4xMtL(UTlv8{ou(Zcx($jrR
z(4j<S_jvN at cYC_~W*L8dFz7yohsVQTv@|_PiJHJtAq9?)PX)O+Yw^?P&(abSo&XTO
zK|%5OA;8T^A)&RQqI261JeKaVS)1?ix~zv3e!fDpK`!?<f=QVA#>b83#%_xsLHL&>
zh88gF-K(XOUt8G0yjLV(W#mf|jfgLcVr7Uag2|bVk at RBxh5F0oXg-oVo!0USEkylT
zIr3!N0xBc~IJyt>@#R!&j?^mvm&cc%eD;O5YmBpXTiI8Mo`&s0A}V8?nH3E=Q)Zgq
zc9IOmNM4M!b2G!Bjg5_Rrtz)&!(U21vm14&W^_8{6!lxao)|reyF2fpQX|Jojryv8
z`_iRLhW*q#c5r&A<b92d at 40c~f(RGyyV8;Vsy1^Rw9t$+mR&#Hx^*kNKh#dYd!vW%
zb<{1iRtDXbZSAbr at k%8aG=fL!g*Qw%;jJ3nM!_`f&jYs6;Xib!aI~!v;gHI%q0{xL
zW7Ed-OAD=b8}MSNF4jb#TsXV<bChN1H@`wQp!D=~ck6Q=nx2`de|hO)FmG~R&PVNv
zKnsh#cGCPP<BInTW=r&x1VnRRv*pmWJmESz(rY|7rnkFtM0VR)QvY+(X*>55^jUZX
z$XBfNQd3TOyMFK&fw?x)lJHn`AUOw?RD}tR%Z0v at LJFlEsGa4s&8v}1RIX=wfz at b9
z5jb<Ef?YjPnImKJm9eKjlj^S2Fox7g68%-A#5udjB`8Vf+0MLm4dQ5{p`jtAH7GN+
z=gzTM!}jbb at zD#~mE0lax~P0nMu$dPGpa^w=&<6rMA0;GWlS>intx(f$H~bFTy`F`
zv at sACemp2#E*~dn5`7Hkp)w at Qh4bbBjxSCtGm4|_Idj?m&F!Oi%U{UL$@x(FPiy4o
z0w(`S)A{zU8zt+><*B|3gWEhjJS{1jE}P?0sz$`!UNyYAb%ip&y0X+>W`~x8VvSa@
zt<3EM1HW~3Z~AQDOr`#-?KoMXGHL9;zf4lg3H02uFswGFWt9hz*V=otVjaMrK79B+
z3+IW^>hOm;{H&}={wyc`^A`H9+MLMG6CT<rwA`i80Yu<m62zg`r=Y%jEIQ25)Mga9
zPrQdDFdov&QO&Ktn1?_A{PS)G1_PRccklC&l)#}>_3c+I`Mey9T+Nvh986ykaG|s}
zSmAuUxVPZive{iNt-WR(v(0v?Jt*r}Ei2LPQ|2do%SmS^Q;9S`fHseFLfC^gApgKG
zdJF=#b-g)liU~@$XpNfRM)Dmeug-YG`g;44U=r%%^BP4}l<nXN*~lAvEC5J*&1Q${
zMGqf7%sGL@*x6&1g_xAdXtxX!=LdH{I^E5u*tBOCuh#+&yNv|T3^#Hyusrwneg%Bp
z5*d6!>&rQh95V;sUu2`io}oi;7m?04nN&3Eue7kOnCK}@cU-XzvQ|>^AIqJRU at 0S9
zP}k4vD^_V~c2rzDuC%!L)4A;*OG;Y!8w;GANRMD&3ATZnfwzvyaq`=BfyIFcw(Ui|
zZ3@<lgVEwWKt`dCs|(s0rqNMRLx7JaEH2Xpjc?TRY&j>8m6`eYT1S^>{T+^6_GS|E
zf7#Zi8f}VKF9mSQ<&fmGwkpxMsZlIUu-$x$@<1$<|0cqRa{^iMbE98DH{sSoKXjHL
zFn)fxiTbVU8P!ZFq2=!n2QznC;cX4}`e`UEO!gXdBWczD{oBztL)z%*=wUD at 3cvxu
z>U{R|#`TFRjZC3HNsI!vnf!CM{gokLauR`PdukU8p8Wmy8`sF!ukTF{)RdK%r+%Y%
znklA{{8Uv{#pL+C>k{~&vakGT!iO4@!*oIbujTNp+T&<EbC6y(ZQuWA%SEoK(Tq-A
z95AYi`T$#TSuHM`ihG^NQ!h-oABs1m9coj;)baAt2GPK9B#}nG at m$TtHek&?2M!EQ
zYXyUSB5mB`9Sm{E5rYf;VU6emgOkpjJ6Amx^L%>R9F)^l6iXSb(klz3r&Cn7xoXh*
zP9DXMGSftf5ZOtY2NbW15~r&O6;Q!dQa-xvQwvR5RpjclPi1skHlg(QRffcWEppk%
zyLSLkXb4=*U<Z}=G`i|6wG+WpMLUHEZ3OB`^?oT<%{Aa|&XwIafR@`mEJz6N-svQ{
z4}ZQ^G0Kw%s#3Uo`GduThSN%YUlW)D70ZqjVfHe^jmeGP$3^u+Tk{=q#<Kbu(+%5|
zfo<vlyAo9lv#xTrn?EmmaV8#EJVeMzUBr{V2Hj(t!;+=L+R9wE^~9^=$Y>4X1m6oT
zf4>sc4=QYWaX48IFx7S-+@&th&WgjZO$iTE(b)J+WiU^KkI(MWrj#q?erFp2?i7#F
zCC!d^YLFw;*4E-ukd;EMyIn7vwK=V=DCbxv%Jzrw+q`{oMkNZ#vWcGycfHcNwh~4j
z)y!DC3NAn%;NB-NFb>Z__v?p8i<9MNNAnR#)5e3cTa3lCOnZ~^P10_E+{yvWj$Tl<
zGv7fT at KQcT>Jk_(Je>!9Rbk1btF%GC at v!?eAv~S8tgkxPg0+=#PHHQ=(wiTFJi?q-
zv%o>=%^A-A_17;hL#MWq<s}iyADfxUP3f1Fl?4tyjm9b7pJgemtLx9amDyGa57U&(
zXfS3FGV$6~p;1R~fuEe|3o;r4z&1Z+gsy6&(p;owzF%l97D+&3h4=XJtE9c?upK at V
zJ(-Jx#Hr=HtM6UUP`@9&i`Me at 4V$(<EpU22{s=siFw$z;bng52 at 1J;iDI)bp+9Y-j
z565rZwwJ7$P}Yx0pc`7+zoj!HkIAD7uuKP<$RW>=Hc~!bp~BnVSZur_kK=anuNkK9
zi~=q3P9o$n&}||4F!v8!e?3tD&t55$W3zhbzI7(LKN2GClwy+p^~$Y#PLUG<H3q2I
z*gH6ISPaRXLC+0DVA#m<XCYPI>f*3re^vvyjomaf5kS+TQ+u^OJv~e=7!RzyjOM_B
zSVU`_bcFC;`Ayo$IBGRDH4 at 2FsPo0HG&o}2kr<*#IJ2yyjjLOAW0sbd;*p`Q+OFdE
zhOk@$*>$`{#oG!CFOvHVbC?alqb3(q9+)XDEltRl4yQGTdct<5qwtcHL9*k=;^G*E
zMCBKC=7~RT*fanrL;-l=a9p+~Ax=%pE(L;j5BQ3Oh1Kc84Lk3xt*+QE^!mwz`i*XQ
z?Bb%=k!wTrf&(JmmsVF-pLlrGgI0YF_L(P*>By1G;0xa at R~*IVQ;khPx%h7W8(^3l
z%7h*W$VG6tSSDvB{d%OqY at zvo-jJ-3jG{L at P!qw6Td${PWKm2?K;IaT)QglT^~WE7
zjpfa$M+fC6wO|Poh7K{wAZV|2LNXKtnBSfKj}5a2ndFnz)d(})loCOhwCd{W+p*=(
z!3L(A_TIn)m&makmAQTU6;`0n^XCz7 at 0Q2e&J2N8R}A7bAZyrSp!$-apkOHL(&Jqq
zv%%xF6r=3N197XZ at S^T*+k3hija-^`6=MjGnJ{oA`V?<;Hud=qb~B@`iqD=s`*<^7
zaVvU1UEMhFb8=XJl76IiT)Rz?gVy1aoSb~*=+V4)DUD#~K`)e1?pphzuAzcTf at 7L8
zKWQwDmNnFN=%m0*oopy80f)}p_MiMm-1*-Ydj4C|33-426JZ9_^Y;CRiq7dXB9y1h
zb;!p~lQ!^QUq6(S^}qZdkVl;Db{rH;AP6Lpp0L-brH0a1$<d89UjYzONquOypQ- at 3
z564SYt*k*Cxs8Qj31>PQl02wxWd5ti at 15x_^OeQIKa=n)Ie?+qx_EQrKHhS6?mMgT
zj#Ge;kLt<K3O!t(L3i-?=Q0ZA)Nks7bmem3aX1jxFgPKJ<ccp}>fFxeEBzw>)74U6
zJ#zERy5w- at CXnZ>vwwNnWSmD{moo=>_QoEBMh&$an=n7%EJ~Is$foFqG?XES#p#o;
zo;bf!%rd<z=||43+N-($@z=p4`1Vf^Qr8F`o}UK`8p;(wK2Uf>KM=`5>d7?7o3ENh
zA3oHjXqFyHAlep{;prcD^$g{Y&wixv{sxFEihup<t{#!r at 8Zc?XiDk#YCeQ(Zr(w!
zRQ&IM*mLcu06)Jf*3m~PYI4Xn?)CWbVcW2IhflK6d#4IBt!aXisS3~kI9ULeZ45+<
zjf_2C`r^n>s7lubH0DQJX<2A~`z;)-)^1G>@&jYdbqP{x>s1jE7PLdtJe;EI0se~c
zNmMU)19HSMT6g^vl$o4-w&xD{otJ<AI9lYFu{#A|?&NbU4R*?{FNes3BxyU#487lc
zP)<s!+9Cx>%{qoKR8-6>KQ3Hm&nY>nWc9oxM}}RyUV at gec|)Eq6?6N#0%{!r>^ltN
zF_d)!RhuPfCiRtZ)M4H77iSppR1+FgG)3eSlxip>p00V at Z!bE>ul5U-br3*;Zcm8^
z`8_JCM@?B~(aLG}z7n02>X?ZOAJy)dt8RO<2cv?B9-7(P_5R_F>({04+<Cpcyv(n*
zgG%W(PLU1dMwC^m%pJHD=0d0<@yL~S&{K`evn__%0R+w{y(y$bQaRtH<uXjbgSNpB
zsho#@Je6JoX-FHretlFIWBZ2($qJB4!)fZ0)c7R*NHL{~T<@>RcUZCigVwqJ&;QL8
zo2iedFgY<{GWg8bw|8*8F%%^{)sL?qM?HQ6V38Cchsn<;Y^Q5P>Jx5W08JUx!Gr3e
zVVkYG{%PY46LaRc-lpfzo`pla9R%T;wa5+030<>*+WL#7a;7GbC3$8b!b|tF_i?;{
z%)>|zq5#Bcu8 at b~p+PdntS|H2gX?L4D)TfOo6O@|yXUQeWBApWa5AaW{~<9t|9%`q
zDABM{ia4BB?Lo(hcnQq<N0*ZaiUo=FQ)uUVRzsb1fqOV}PyXWtAWh8GKmK4w{Syyl
ze-;+jX;Hc|qqqKBRFWj*zbmh;&J_r#{Wy|y(SMfDq3>Nh>Feto3B0UFnC>@!-q)><
z>mBsI;nUQl<ghfFL3{r8dO?)*dwAq29urWF4&Yu(o?XW8G&H_1UPOU}+qijiJQ_fV
z94RO_^%+JQk6c{#={fLOj#Pu0N;hcbWZ*IV<MZdw+2(_Up#r+xLn<gVN*Tnc?d(V_
z&bvp?A at nJ(hMWV{iFDJbYCbpziZnAb^EHBbt*tY0$mp^5oOm<=p{zH(r=g_ky??Ng
z0EKikwIO^~63~m{lu};dppjtLNDG1NM<nRz at -s8J6TFipfvY~a9o!`pR#j50QA3Gl
z_51Iy0Ha8Cc37H~hj{WNk-WfUEh;MgKZJ#8z1;yut+RJWlit}H>%l$9F#Ge<JJ;AG
zg1K**wLwmHcXoD;FI`@^*OC@%vM_l!LszN5G4Jc}u-@|=zzktq+iaDritTiqU;0$N
z-OuLFf9MTHUsw<reXHnk2^OW^>!>JYC5ypo$iYF4c~HDw^a@#y_<!x`(KPcUQeAH_
zn4l79Jnn$Ql;M(&2sFFG0Nr;xg96YK9ysVQ{Y<*R(IHxQ+xG43n|9FO({FuO5k3_x
z=+F|oJjOp(u;!Sd;fMZ8^TS_Tgn{;hd9Bc9xf4BZbZV`>uOdjiD#LzZa at bQ;T$}?9
z#FnDY&dzXKaEteHCrao_0ESK{H&Y=03Q)#*E?h`$(*6E!_!ET#u+P7*BgbmIUK2;r
zmIDwD4 at 7r&SHCT at rrodjBzjA>V+SBhpKh2!jPCvm6;NvH9WAXPp|u6CvFu at 1(p4OE
zT24W~r_mJ%-g_9G<~!H%)(pui{weqJbfUyKL4yVj;iQ%;7Qlvd`0SKI!horvB#-_4
zn-Wikc*F?{FRwBdsPC=)p{(UB+Zp+rm at LuUj)G|RUM9ME@=WL2s#UZZO72{Tog@}i
z4J0WGytU{Cr at 3}3-NvL4u<b@>4l1_>Ya>aBqY;ZB>q{ar&$Rc+?c2BO-WjN%|NR39
zF)de6viZ%ehk=|1aZW448aE^*t#pY<%WnPsPxudR#>U28l?%^;q%sI}+K6`<1#ZBl
zK{eC(5 at e&geH!-C#r5sh|HSD3Ld<^LJA=UVIflac@|V^etK?9dz5|aQJsM0YWrT<x
z6s)}VVcXdORI4=Cst`U!+^$3;3O=L5v^1Kdvc9a7vQaT$wIuqdnTQJZ>Z%)2NI9Tp
z85OL&laZ0(S9>8s&B(6=pvpOcwnxdk^K?~WMn at bJH9p@H at RML!)xZ}4QFG8#02tL4
zH4O~Ys4-3YIbd$v*=FrMFj;*2b|=FW&ltgeIXQ1O at OZk7vZ`t@(n0s^@LS7KW#kA2
zS6A1)@(ORD++4?#@1$Pqf0*&TWcU-EUUmZ at Pz;Y*A9o%r#C386yai1i0X%@?q?cm8
z1xgikD?jm;pvDrl7m1_KG=E{LfB1!pVT!94J&z39ZIe at t&_!a9W15QrNw9>3vs5Fv
zcx|U+K$%4YUO=U}u{P(lW_6`wMm<?wpxvTTjdKE-B16M#Wob^YDpY{eM0?z@>dO~7
zFGhhh`vudCp{xe9{nPLyWQUx<6 at s*>g;a4SCeECM1EbBi-+I4&Q}RB0^5k{3Z1Wlj
zSEoN~OG3XPzLt at Zks|^->3cjHpK&#qCnC-1mHC`B?Dc26`$VfUSm*lseNvPAJPZ>?
zY;>sY4fKGJ3jE&z*bM|aJ5vdu$tDd#yCx)^w0kv22=SjikIY^VM$08gc*~Y8DCxoC
zxwvCuo}e%LDjvvXl*DP!vfEY_g!>CtwK%YlaX>ABpa%vSRwDy$Zs3RROvhzt&N2=;
z9-x3uQ}*e9OR1MlU#>@_?Af<Zdv2k+TFL|O1DJ$@gPE@`+dvf>L_<oNF2rsWU<rY2
ziM+WLkW>(o=W?h&<K^5#wjx5h<JyW9`4t>dIaSN!@y>%uBokT?LPhj!9(r{>bk2(a
z at kwqZCZ3;=Y(O%y7->2WN|X4WfOQq%KzY3Vzz40^tA%vQM~xB&lhr}_4(IQnrmoL4
z=}AN3ij0anb>V`nh!>+g30R9^Ev_n@)M9a3M^qQdi&>hVTZoY=_eF+&pzTEW)t=NU
z!3#)sy>(i;2t+PI;zV;U1ale$>Lh^;i>gissRo?330gZ087BS5jju`T2QEgV-W*t)
zFBNj9<<R9`UPKp8ht+jnAxTx|8|)q58Ei99CFnr<b0!!4koPUcQK;U>(j)n&FPROs
zq{lz=@sYddNh*M(&`O$)Cm!@sQ0kH6X9Wd23=N<;l)S$F+}+)MyNl`Z6DR13Ty_>@
zzaM#Xt4K9&P?<P|63^h1qiv7=Q=Na%_Ta&TJt(?X at q%_iQTdBQ at tkxjN$Pnm;la at o
zA#B2)^g7qrw7&R%RdDF|L=zNc+hg%foTIsweWpbOi^l_`({BG0tgMyH=z<0piJJA*
zR`op*_Y3I=mZJ$Z%sg at I*nWuYZ<cl{rIw0wwcjE1$vn`Ts-O{AIh`?-pS_ueh0Z at k
z4TIbpHa%0xT=sY=44xi$L<}9CCWirQt6dv<w)I;^c2!bv<Fft!ezQUT96D=SP_C at K
zsg2dBiP=Rwh&b)PARhG{xS-_ at R5dOq?qm?Px-bvq7rZj-4xAGKdN*nT>&qQxCf*Rr
zx$T<3DZ=;e-E%d}4C65?`SsUd&k4+dkEO4C{^EreyI#W=c1aj at +T&_EW^SSZk6&{@
zYNOl7s%p$T*QnuSP+U at yEg!~pYV2_im%2!Yg6u8oIf)S71IWiF%#GkL&1R?z^bR5c
zm!OK!Cw;z2`XFbn+po7%S-TSJQ{R_>?5RpV;!Gm+C!9s6j6K4_!Vs!aNHar_*aCSi
z;s|Q=)ANUyf+&nM2a!9_Q)p#t0r!DdNq60e3I at Dyk+s*TXM8+4RKSklUE;cl5({|6
zH<lSuZBgoVuo2-ShpY(dN)(KvqPn{Jc{$bGFC}H9B>zX_0e2~k2Y+T4T>8g$P@%q!
zO{ex4#b#z*pr0B7D;@v(^|7GLf`WqXo*wb4p1<wJ^AwS-bOE14hx6W}B;MjRj35>>
z@}g{@^}hzi{t0NLFN+il(zV7*TmT8^dko-A3~nTaM_cy<S59<2+!+TZOTo{wXkxvP
zygl)c{UH8-v>*IaO$&>VRpWrgPM$t3Mr2Xs+?xY|C=UdMG`P~7NYkx9C9wRxXzTXv
z<~c72O$Xi%=8O at G38B^bE9hS33=PLDCQvSh!B1v<rlje}R`{PU8nw-p2j?}@W>%#G
z?;?S?q-x8@%0w1&5a}@G_9NT5u|&K)U3l7fL6x1CSDhvR`RUVLLDooEl&s0g$u#4y
zmxHV`4BNLlgshqOmhAyUQqIH(@QP($H>j0!465!>y`o0C>p>pV;=vz}TW8r<QC%8f
zH#lij8T3~T{CI6;U#}BU!b38Yzd7x_(o^sN^<#8SU^C6KIYnTi)d30j<<8tWqg>D2
z6ec at D7S+c{7sYa{E%ytF(@kp`y+j`L(L!JrZU8kh4H<sOlW$B4Cn6>J?wvckGoxf8
zZ;)OB)#f!G&j1#(0<QT?aw2>cBtFIMaYkAp$L0Fu3l}bsnxzJBO?D5sxoEVu&FxKz
zX*v*;1Q)*10KMEGUMN)GZ=f8y0+HPb>sxmwqwN(sgW({f{1lrD5w8Jo+ at VG4cX!%P
zd4QY?DFYwR3)Q2kxMJ*8hBjUWahr-SXZ42?2WtrYKu$}oonlVoq<wTT8$qWBK_S%@
z>v18wGlfq2ziPQKb|>puN%j&-)7W$%Ug!{5;Z)ZXOia2+f`*OIOV`bM&bNV8m;`2<
zG`DWsMnN~YZDn%|L at a{P9nh}w!W$;IG;$#w`oyPUdO`b4f+m9Iu}Y$W6hs#_dM1%c
z(s{Iy33O{;Uw_s(U;xW0fn9r86b4XKZTmy4wmLAN@!E6nV6qFN?KL8d0M;fK7Z=}-
zYqHg%o<PaafubbQdp?IH|MtfxkbM1$cu4V~wTjX)ssbQ0plOBKt!Q|ZqljS0AW6Tr
zd$0)Kq8)F~$*^}&Thh}*K}TOF5JZGeG?u+Gl at Bs&WByA20cS_Hfd7OJs;b-yD-R{}
zXjlj64CXWFjW3?RcI}!J3{>WgYF2}210=((mciC)K;p|rr<o3n2qc=>R7wL^*A=LP
ztrq8t&avP5w95f at yg&iFcNKxKeJa&fpB~h0NQebbr3*Tl*z-`3VnG at 2$?QWeBmlJz
zdK9r^QIH>>#3~P)57k}Aa)3ATf&vq42vBv>#d9?Z93?m+oE8U91T~SsLR;u!)<glJ
z7380%6&L^vA5ap|YOrQ8QWyJN#ipX;*yoCh^yQ>hWGMfRuWsGF>wxYKsQ_x~bO#RT
z(00PbQ_cg<VciNTwVgP6crSM=gD<2+cnQWqaTtJADUjRb6>+VJ?Fnp5C0LF{aV&ct
zMmVwlcU&+Pz=L+(#8>fl8juaDY26?t8n!l#!TXyTnZFwf7oAH3jr at DF@!Z5j4b*)7
z?um&B(uy#b!l5DNWzpvmjNBb$NZXWaW9DMEyI4PIA}r`G?`<&9oGCz)>H5vJiP<+c
z*oj}Z65`POH#QaLf8HgOBFpPhbjhL(Ye~2v>kHsXx^97#4&<{+BJgYl4q*iVg50QE
zW~~MpJZTF$$jX4Gujm}<g)cpL at PPeZ^&wIZZ-|N2(HZ52LmaTnK3yK*aRkOv0;uVg
zjoxLcgKi1Q-o_5-jE;hH0zn<4-~1NoHUTKvYzBtM7)TQkZJA*lg-kFxH|Gadq at K{<
zP)&N_)qyrw%VedX at Z!o*dLRUINV-ARh&H(>u>&pzrL|@HWBJns)JNKHCEvd{Zl6Td
zQTBtXKM?sHue_+Nqew*Bi&3we^XXA1BKH7{e?KH7Bm}=n400PP!L&I~6j_>hhY5w6
zSd2ZElrG`l>FE<l at bPLz9U~QOEVE}vQ07t1yR532fAV(PSHHX at QNb;UMXtjS8!_}y
za_ at NINrJdgq8*?=?CtA2g&(3olvPy~ES}qb1 at w}22Wm}3bqo45u_=F!7{fob!bac_
zSHv=IFQfbY_uI5q)6e&LBCVwUKldVuP*YQ9322o2T__!FXxAz7-Y)&C_TUXfzj<>`
zVCu_-MWkr-e;zRJH0QY)!VU)~A#2~08=<%$LJbYIW+Z?3 at L?LY%(q4S+n168dq|jz
zD|4OOR5Q#6WhgntA?^FR2#d{N<cl8XvR8_tijMu%$30pID?0Cuy>GI&e5$J9vj#x)
z;Aoy|lr~jJh$dXS;d)oQABMm>tqrvWBuSI50AkX5+YC_A#c}YxAgDS5VipPO!r#z!
zdJDiz#6ETFOMqH35W=V7`e!+DqI7Hm0E&pdU<j1l<(11vJf~qSf~x+e&_b){4(Wqh
zjSAXhr}%2;XMOPS;UT)0>$~Z|fdic9SvcKy5Sxxhu5}G8HK#roWJJ2IXZPm<W1cP-
zmh$KAPysWafh2XlT at 4@xZb%YMQypx;TUSJ8k;CGgmU|8oxsjA|G-a&@b$immz7P~)
z*)Mw#)&QVg=DxVx*5*|0na?M}1}gc+>lm!s!r`gA2HId_QY at xhNRJBlur6xn@obZQ
zd-q1c3tq~kUab at W88}g+po3{_q<z#o*OLGFodV84={0~kBbxFrU(ET&i8-wY`kY~Z
z{tF<)$b~M<5v&(=`ev_JhqOBV^0)}KzwUsSawkO03e;059ntJi`#6j`atnLR%*=?!
zMJ_xJ7bNV(n26imC!4-D1z#3X);2QIK+!@@+9!Lp<0Kyc;Is4j`T3+hAw4DxhRDGk
zwaBS5Vte+TNfllI1 at 7bTf6vw)Ef&yCk{i&AE?F62tsU*%Sf|;%Zh6d%z?>{;oOThk
z38BZ;Wdho7>U|9QZPxTnjoIM0AF0->xqW^t>Fj5tBPcA~Zs1U at FGAoV7m0}zJwOaw
zREupP0k&v49bo0qZO=}JEh!4RPeFA+)7awoqMb8{npOY=Il2p4Vkrd&x~MJ3I}%~$
z<>qG-_9mR-78<4jXxPaBtTWYDb_R5;D0yGKdNsh&yQl*Oo}N2|CkLJ=A2e%BxJhAm
z#Mz?FZYF{x1$Uj|+S)oWBP^S)D<7nU(Un$@&#(hftP!+rW!uL8xs{`I7xxt>FwJt|
zjc^eYY1b{HOXb>3p<bO7hms2p`m}jPzQfXVt?1cUn7fB+B3$;KQNFX#HbfXEtl)R9
z8DLgm8&0u#*o72k3m0+ws*CM)W7x_`<%C;465Lrhpwa*_V<$~aP012kL%*4g_~4E5
z7ovWYqJ0G at 9vI<K=QK%uYzJ)<C|Q at r>Ta<6F=91Ii&bl?isAm{mtXwzUEdgW3TBjY
z`)r!+IK2SS+*W2cP<@zU4dxHGSQ at Y*v3JkELJz9j$Ycu|QcBQIATYX3C7?HW6X&3{
zD^56srBFvK66nRL4+`d1d+eS9{sjPsszcOLTf9Zzr%$^q&!7R2N6Ck4&`vEEIhn}C
zICm1sU<sl(Zq#BqLcVR~unvOJ2 at g+fr@-`6lEUDyC8I=-lH%b9R<|4Fz-*5WJe@=E
zeo<fOZ%(+iI-Fdf3q`N-<CihRvnV})m8!f(NVTxbZ3vo21gn;5bEHbkpsW0s4=kCR
z?zNL{)0=P|dt8=bFBxXhA at qx3@1vd(5AKss#69!Yx#$rdjMtRwjdBc!v at b(<czKNY
z^VDM?lM`ek5hj>;Gga&4kt46FIWT?T5+xZ%c$*m9nJwz48m%lE)@0~#m=b92%R&ax
z2$5ZB()0 at 8l!Fy39JY|g!71B#J&_WA at I;GnNo-{}&;wU9riS!zqZl~>a(pfa$PPSc
zXAWDIx%&r=aZ|3G;XLS-h84?s!$~>%x6zlWr|{^27Z>X>F){h5dj0(f$2GS}341&7
ztb>m8?-O$&%AfP#LhGBDYfL=#I&B at -c3b_E<KYv}%C&@u6E%TI%?!rS%FEZp*{7ZW
zve~xV^#n1)5I+lmqG`;QEI5YqmM6=JQ#;#gJP9o?w|yn>t1NoWAFLicaNjLb(6$dW
zs2HX5ST4^`5G{Z~Fq-SewQI(@cMzZ$har*dc~B?`jAtz9oXMFylQl&;$aDh(_k!lr
zsb@)sfQ^N-G?Q1NPZEF2a0O|14;CB4-t-4I4ZNq(%dvpy_K#1g>ImaNyq$S#CM+x*
zSmJk9BWZcr-p_Ol7mhAD!<7rR=4tA~yQ%GtUTw<?YGM3WxO*}R3{6(uC5B-WkrLuP
z@!88|xDQF!p9q1VHNkTE06jzyVlJBrWgp;e2Ui>7GoGu%x`?R*VwM9$EzSvu#4H#i
zxm)Iw!ZYst(*_ at J@9t`wyc%Q#dfEe|iziqgzfRaqVnciL=FRPxH+RnI1)o5GBO7{u
zDg7)LD{~d<m&I@{Y?W+z5wob^bMtCrSRi!<8SPp$lA at v)R#v8V+gTlhLp$|T<xL0+
zlp4B|Cr?Jvar52AHAk6PC7<W+N7r}GBUvS*a?;FZy{7NEGuD<Rk<8<`oCz>*M6(ku
zPKZ^<pd}f&JHBz9xg{MQnr$7};fbsi>bR(r<8fX)7)>7WzGYEZ(X%7gwr<_Zrq=lC
z>NW>ZIGhuhK?v$&IRmdraz=-(D8wb at Z1dP`%Te1aofU?X#Msv#`#&-ES#<nIV;^Iu
zb{Be9PLBde0E>9X?PVdbKB4n3PNc70Q!f${xu&KEGUO_o)sm!E*psKPQ2?4oSfu at l
zJ!*A%A*zZ at Hw?CPWfP05;r?YDWVrjI+l#QObzbpvD5_zQp`-FsGGXAUO2>Y0*P0VL
zK(5`ZeH*BbE8$f@@?a;8Et+vfT)bM at bGV<;Mg at 6_FMNA0DK=h`*MP;7h?m<^+z1~_
zqq<#1WMHl|9Nh%Af%zb<1L1fvts<cIq7i3#Dy~o5TVGucij^MD<U?4WEm(d#SW<*`
z at 4x07ykhh3eS>VRLPy}E0tQh~R}VejKOav96U{Zhl1EV&BfX>lx}>CHf#ZtUFhF`_
zxs&<_i#)rzck5n5{QN}$&+w00T}6o9KMS2N&z)YNz#9~gv=t=Cg^q50aDw?dX$w#8
z+P(XADWjbjY%{e4M?o=B06Mm`UI9TX#>Go_?oVe7a`j1h!bla!xeFpp0#-Ypsv8$c
zy&X3F3^2RNxa~b7gBw9F&@=e<#`e at rwwSyi)Ju>xg6y>3UkZ>T$8)DV2hBjH%0rZ-
z(CyXI*46`DrsXw{AyvOW%t;-I&ouiT+Krr^L$wr2Jx1c78C?fX+|kR2=__ at c-aSOi
zfIJ7WMG}QntjEbSon&$JdeLAllpD^$z8f?Hu!OsX;=W$hQZ5oc8doSjxB01DT*t4c
zuM-}XRs)hO8Hj)&qkw#q{*8vY!<xZHQ+(qBUTPhrR>+-6g+0inuaW<QR@*RyIBK{b
z0~}Ji2dJp%(2!y73UCp2wY#u~m*6f8%}1JQu1QF|vui^l)x7rB2Ax>pH8hAr!9iR`
zoWx3Q3Qp=HH`c9arwH7BV#BFJ6PTU}3gu#AD%p>Ro&qN2sE|-+WXr^w9#GU3Auljv
z%C;TIgGW!DiYqh&K4`JVe1-=MB^}pp++ZUu52gh^UW1^B8JT+tN+}<#dpx+ at QHAK>
zoOpAyGe-KT->}`+NBg!WB*HLNf{6A&!ajiK&bB(=v-2p7wYYLlGE}Guv at eXB?D6vD
z%i#vJU0=K#&mKKm^y`)_Cc{=Et4rfni at 8Wr!T?qyeF*^H6PQb*MF|sz*!wIb#2}d4
z<ik8BSlq!JH03fj3c}0v6 at nBQy=_B>Y{h4#gQX_qmrP{j=*snmz8+RP&A|TTwN7ek
zYL3-~DkoY@?Qx+ at Xx_Pd_W)F^k`IrzdBBa{oEVMUEx}_^wGE*MX?FCAcM8G_Vh=FR
z1;n?rYi+f$RWX!I4T_dBRx&1tyJRY at I&4a(4|V|VUBE;{x4EDsN87DLFQL_@@UYSY
z-p4Nf;{`xiXf0%2U}JL!X}qVI<C{d0z}d4^1Dyp0y&N~|jk&fL`NK}AlAc*hzW>|H
ziwjPT(++Awb+MXInX^{{aeg&Cj^Ai$hia>;njh!fvhKI|c7~%_FOyJ$-hr3~9h%hp
z#tZ}se*V17CMrWIw5bG1LjTvAYD4Fgh|Vm_XD-rDT?Tc^pc{ab$bxERuHHtV=+Tj%
z{q9c?3ljZ{Fg_%7RHY|Rp1kGH$U%#qjuBf-R<=+gn>b9rUCRl|-5UuhN*B!IBXus)
z!BPNWqOk~Xdhbk%RY(jZMm|!_c*52jF-kgNP4N~peKn!`sIT+`MO~C8zAdg8vTh5O
zC*8zzVREMhyI*eOU~f-~Il+&dRpJ3`S4Cf(HsRsAkp$W+9&czPqh`HUtQI(mH0z1m
zWTG{8g?g(@_~nhbOl7cKW-MM{7w~A}(9EgS{zZ=!0qw{lV at g#IMnlYiO2erTX|wGD
z@)=C7L8~_1?(ohVv}el$1iy`8%j|jAYDfXegE3jP)BRKb5;{RqsVy$dqyGW_ONi0P
z|6Aql+LVUpL at tJj5se?AUk#0ZRmQM{1K6L*ne>&;FPM9``1a|yjLC>Qr((j#00B@!
z_SsNlj<yc|XAW at heza=PkVrR1Xhn!XdI*LW9N9p$<^bt=YpY9f8U^{XdK-TJ83XJ>
zD?rEOeqh!(9XqHDhio;%E(#t(Js>Ug20<8xcnLw}6g=CLQ!9jps>WGo;2DkwlPHl$
zy>n+H+7>e4ABQgGs@!2!u+Ro%G#}AI$gY+Qqh!eS at euN_nhLH%r6?gdc33z$6^NAq
zjM}&AK&(N7rZ?{=xt2+jN_(*AT(bltm7y{ElsYuV>3Ex$$ICWKvB8L at 2MJsmwhJ=-
zjbepclr8)8>FF`~B-NX!9}39&yWtkYA=|;EN^q5^rUQ2-s^uskKk&jqK>Ww3lAq6Q
zZ#Soilidz5^aT5x$jm^^mGJQJk1~EIASLReK#&Ph+*c&#XfOkej#q at tilAHFgB=M-
z)FbY&Bf-N~qeHKzi4Z}<fms9HuEP7A6R3 at 7qqP(ZBt%6i*ad-fHpC00T^THm0!zdW
z5RV{#)rlVkbxCC=^A#K+#B at uvU?l$COACOJUx-DEhNwdqb^7iVwFj-cqB{O2?!q5m
z|LN`=|G}H|-}(6bT2s!{Kulc1+FICO$DUH%KQwjdle_b;@11}DDLmlAF2-Mf3cnP1
zU8?14O1+`9oU)n$%QpR8m$u9wV%zeGKG4Re<`?N*zx<;A^Izw;AExnLT8b!`yfUmH
zQzRZIldGXuuRNM>G21TBQ=L8jnTLw%|Hb;5S-O4yxr>i)HRZv&+&xO>5}vS={PpAO
z|H}tKMfLy7qd&-116SBV{8f3dMRpJ$Vmbfhr=yT;ax;jh(Akd!pmhac7>QvcI02pS
z!cmpCZbQrcoA}v=86D?uk@@QN-_Ia%4q0~E5<rFOI~#dH$?+I(1)S|4Mc5jv{CTKU
z6S3`lMHc^G|9bNanudRU{U5a!b}7EYC>*%&oJP<MxoUx(>n;eZP*_{mBgpyke|2jX
zsbloq#)aly18^SL=CH3{?XiDjQv98)(jQ-M{+GMLtbgV|bxQ8~HVWFY&?z!HS`PrP
z1=DC`@PNQw9UYyrvN9QrB4Cmr0r>b7j8Mb^hb;%TCBB2;ibQ$|X{jEQ5f*)44z%am
z$Yy0_Wn=FSvhfP|e;LdP5I*UYT#VGcbQ at 7Et*C~Cn-SoZ0I9Bn*OyUN4t$%Mx(B;1
z5Ml^;hmdK+4+XQik)M4jtT&(x`C-!&?{t_8!R8<d*d+nhKr&hX#NAyEaCZ-wLU<I6
z{8auV=6Mub;>SZX#|tox(HF9(3-NKmlY{P*K=?hoc1gXom at iW$JUKexbnLc+A~uY|
znQb!_1v-aJXA2-SpJ1a62&O-8xS2y-vrXr*DG<;x_4N{{ak*+wG*r+q9{xOlN_dxt
zjzjm(wZ)2f0#JH|K*#^KYuBGvUKqTr9Q|Qy at M1Lh>(Qg;-il!iAfM0#Q}Dv!U1tu?
zc^*|Y0tJAz9`?c8{AkxofM`SV$^JyD*)AuN5m2_%d9WE)tm9$W#52u1K?WWmbMGQ^
zmUmDFqvn7WdyP7*zJA!KiAG5nZbexR7Z(>g8YZ!Gh8?*#4_WN<fu$tKF%*Prr%e?~
zsyoUq?~DLOxT};fCDLoLSgZQBS-%95qC1(AkiP<^#RK)R?SK%G-RB_2ezO}V*wh0?
zK7SLu`f@=H%=_y&fD=g{VMK?*dF%kZVlR6C=pa*$*Vy19&r^d9ypZ9v=ucGhzVI+M
zfApm1c?DOO=p^PjHIQjP66;EKaQV6Iq&-I`_>7QLDj9}Z>@XC~kkBC9HM9f2 at i0G_
zH;BM)i at hXfrmBQ;*f}A)k<J%$@I=#tM60A6#AVR at _A1#o22*1ZAn3B#XG;${LA`rO
z#=tT58}59{d<0^zG}$zU$j<1oBs{VlSF(w?3A5QN=Xe(W$F~N6^%`MNCwpl`m(YXO
zMA>bChbDM+Y_dnxY!I-IY%)X|LKuE{Ir at O3i1m-SSSD6PJZSIkOKsL)1QHUcJhL)K
zw&iJK?SSu(%)EH7ZyQrUz~*-r;0m_(#alqGFTQb=%YrE(p~%`xx?+9(1kxYk9b~F`
zRcKL&go_C&QQG at hdbZ$<*ZVp6NFr2m&9J;x<K6~M)bjsC6Hnxe(oV7`3t3-S<h8HL
zCNqFphy`d+D^AD`ozygT&M8k!AtO3Sq9=kX`lPAz+5Mo(*I{aefT!LR&LD9BA|kJ~
z<rf?yXa;7ubT^37t<yh6$CI%wOo8XjqxBM~B)0rz;^ubNh?S3j0cfkakMyLa9zn1U
z4Z~+{X`-l at p^Y7JkWI)apU6y`0k{%!JN#wOz+u3*q6?vJuY9i%$*_c_geKr^Pf`fh
zGd4T15S{Gp1^EoZmcxL%V|~XSP%%{z^u!>Btwe at qtu+EgAK!|BCL86HoOQeD%`HZO
zFI%>5tqoh9K9Ms|JQ*N}C2u at GM)92_=nKp9-(G#^c|B)1bcA6^{?0s3HrSx$YAs<p
z3okRl;Nr>fFzZ2aAcJle%kw56#Kh4p!$e<$u${qX3>9DRzb1QsfG8N1Ib&tl>#Imy
z7%q)0fM}SxRVMRyH4!2faAN=$u3K3#hnEcT1l*+r_Smw_*`#4U+;9dBf7`8xX;}ZZ
z=#JB^#?{FvAkIdleq2m6`WWWZr at xrDAvqHiz3<MT_iG5+LkQCXS29wFG at V2cCrB_B
zxG<6KK@#|rSBKq{=6i3&!g=0d#Fz`DD{(e&+8dv>=-0M_?0E)TF(LRZ{k1{(k_job
z{DS0)NI*~?)n-QIa`4lH8N{7SBjuAmn}FggkGI1<T^%x~Uf`&P+p$<!wW5QcWAJbS
z<e5q4aWoeIse(E4Se?tJo=CWbo2`wOtf{`M(FZDXZ|$y at D>~;6Wo<tueJx#jNV^x2
ztL5S%2<HQ9FVufy>tAmn4|?F}y+J)N>y^MtrxzFjCSMq(rabHn_DQ;>2IyS^kILQG
z(b0Uq!-$#^_^rn1S;@$&-|+e8*tJGk1M0-_1qK`J*+cKhg+S#pY|DJsKM%Li=f9sk
zVPiOm<c>`mntNy&7y=hd=!}{e-etjJ5N!(IQv;dtMU{YP+->6V=yOeYtW^OqKp%xH
zP{j{>5hoFYdGkTf3q!vVwOFWCC9 at UM`Svz0n_n>s+H+S;U^#GLxa7WlfwuMz at fCR(
zvqnl>9z8k$Lcxl+bbO`vtke0#VPqx4e)GSs$Zk96LUyUsDBg<2*6E5_G}JCNdl-uh
z$IZyFHl^r_TC+qS5pi%|V##EGDB^vD+abUx6w6r`O^z*+z(^8u7#YizXgszu_ml$V
z%3qxYngwZ^LHJO<4z+Y5(FT(K&!8<++V_;aY3yDNGi)^BvgAOFvM?2Z7LJ_!A`LeO
z8D|5 at m6D^i|1t4GUr*G63+FlCS`JEkORBaPvGLY5p;fsDH|rvXRrmb%o3zw%+pB0-
zuv`qXjpo~d3(|-v+}Y9uk{5JA at 3eq}0joGhpYdegx*_w6V|td at Lni6hu<O(SjM*8H
zW<~mvGpHguF!&qxA_o(9fm$wBIJs>VVx at 3iCctz4c&hL`$_gf(crzvg7+%mqct>)L
zHWLfxmc|0HoWS42gSl&_-!$gtVlS_#rFycH6YHpA*wd#k5p~TUA3k`nu0!tB=AS60
zK~owAI(4MMTH`x56!JG*s{w at r08}x^56-;?kK8epx-^-znAkeRMlSkj0jFFLyUr`%
zzBu#2TGsvnIAa#)#*Hj=)M-Fu!f(Qx7jg|M3%y|@n|39A^!Tu-+2?tu&9p%Q;Ax2d
zC3gmm<CHZ^Kn{AuIP6+vX=0V(dmR=D;HlAW`WL9g&JV~KT$djiJ;Z2X%g6qzuyIq?
zpo%DBmHJ3_!~saJilqln6L?<pv05&;*hMgoYKHGbW&Zs0<>09~vd>GJ#tI6mKJD7D
z#v1W-=cqQeqjZPEa#s^U-|=lAV`GQIoEqh^wmRY2QLzKmr_95Ka(A;Rh+*B|E*M(V
zhBJVOGoqU6wu8rk?pi;>ETyx!tHS+kMI<65K=6)UeVi|t`5~DzU=QAmgewEvVB}kO
zUngS0ad|?-Zz{l{AEv%KjM5KE*r4b*%aX2iSqAY>21;_~ai5sj_$reGKyZqKqn>rF
z%#sZnPz`A0(e5gtwOni=H7+Ayg}FJmLESp=qP!fdSYD)4R^!LC44{x%4y%(fFb^5F
zwwwS$I*IMk5`$3>IX#kZrj{hyR}Nr!6*i7%KbLFNx$i&!q4zvG{0l1q+IR2r at S9H?
z=5zYd8$9ZXaSihW4NP)*uZgESJx}fQPp{*5MgryPFY<t9ZeJ89TZ0s?8#W!w6An90
z^@%5{X4OXWYsGgLVU80XsA#hU_-5J1ZcsX&VJEnjk4V(LbxI-?S;XUg{D#l>n50*%
zCr^H6 at 4z7I#!cCC$x?uTir`{Kx(Q>96s^KD)g$q+S%b`tjk at f_jP^N?6DLme^EEW~
zc}LiOsmwPP#z<Nlt#%ZSP9|2>mVqsd2e*4d43I&HSem?hj)ipb5>Xw$tAKWt1xGc~
zoutq59P>D2mjzbFef#=luGm7EuuR#^Xnhg6&w|(GC>fD<<I#;-=^#up?Oe1#PJ8bF
zpFXgYh)o6K)3$sEmCZXDr<s!j5RsA$yykECjil=_tDiyF20}AaXBn?(!E+`(>yCmM
zx)}L9TZ at dL7%a#9&DGf-5>AE&1`gF8PA5a+Y9knCsDn>x=sFn&y_mlqA_|~Q$$-l~
zNvsj9yx_7F^q-Wu?6+(yi0P=!2Lz|9uSoQNa%(>Puz>MJKp3iLCF@?~2NW4QRYmFk
z7 at cOUY_CaPT8&-QbD-%mDmQ;u#DKD~oj#JISjLg_t*83t>~&ZHOb3vGElniz=~zlS
zN1aytok+u!lbPCDW)Ceks=%gj$P!n#dlTtr3pg?Ok)s6X5q8<@uA7J3vH2rJ^s(Bq
zI^5$)Y;nq(kIVICmcESFEroC&&n0_V!paFlJ5UJ=2A^QthI6GUL=j7uSo<JaBB?j^
zR(|>N#Y)8$YBupSek7>}suSPJ!m at 93=u)lI&V=c|B1&FIEZH1kW2>DEzIqc)6hEzz
zWmDV*Aud2FPsS3P#a7Nx#}_#`)i5Rt-nzk|ID`?!1y3%%(`d-Lqt={oJ5)*@q=Qc;
zdk^3>rMmH at CVl}2C_cx1klXmBXsb*xpH(HhVQRAvLIwa5Tl#d`KtE*$9hPC#*?^wq
zZff%#{2cmx|K0tMw-<ey%7>kxV#*f$v(ApxJyUb9Py$*%f_9aQlRN1(2}QJleQd-?
zE%QT}f#C8bOlOPqR5)6~_*!OVWI}EriKnbr=gb%zAO8%%KlV$M2<?G!O6;HycE(b{
z3ki$lKv|{IT91{`=Gn7QI4Z3ozrmLzuIQR$TRn&crDj_ok8X1^cPu6e-P!Ixc&>Wh
z)U2g!(oyI668JW>TYEtT>FM;-iG`IBgaJ=>-=LM|$Nnr8JWv9yb26KUW^%ABZ|pm(
zp5~SsLZ()?ZX>|C^McAVJQiYn<1Y<J^tLCvIKU6=Hx{PR)2f0NTD(VrtMW-4>_9n6
z_wL1%+F;ODtOuCoJNMi;GO9{wDzjPdOU(<Oj;rL>&4SNX92Zd$-&1GRvn7>j0b}~~
zjI*Z$4!*$d4hB1R!ozbhoM`Ib?EvjL)J_I8zGH)h2<ZK}T3dbns5io^d(!_yR}8CB
z;-@(d#Fu3XEErx>yt<W}HgC2IUYbKsuVqvD>U4n_^<>XLzmcW?P&>JE<<II;ogOC^
zXGi1FeYbvOU<kEE%StgQgwwV1>wDZcGdm$T=6->*2X0&opiau%S?plK88ph3LXsvu
zcXh8FpYnM at YzW9_m$I)IXhhkjp*LniVV9ljzN=a+j)~U$zcRZ-v$#JKO7-mv_1yXE
zub(o$j-guC7ztP}w(l-}m<>xb*>{9B9~Map+22GjBg`@7_D6Q}0jY95((}`kr;vGK
zdbG9CynKU5d|So4=Q^GFd1#yaCiCL4 at fU3YhPcYJ667!yO_2}t++mZ~=%1L7=dkpy
z)Z^p2F9)tg{xY}aUaP0Zj$a%tF)LR#x9ctmzS$WopK^*aKlU(V&S^qnnuZIr`6EsO
z73k~tKXC=SiNDU-?lRN>Sif}kap`4-fuJE<ak}NChQOKtgHT$Ef#n;GTj&uu9h{9p
z!h2=-ec$ZK=(7yTjj<OgJw_)NP=K-b>MFQ|zM6T^W=$V~xO~RB*H;09kRx_k;$J!K
z2`TR)s&2a5nxjepkqyc2R_#mNr}yA$9+5 at d6?&`T+#2M=kwA8>_*PLL=5UD0*%qBZ
z+Og1)EGOW7$nmYZLF_SVr?GyaW~#?989mC|Y=(Fj>p|t2WgbWRzDH|R{qnwu&9eds
z44DG6*w`h?<yqj$fkgpa7AiBB165ay&G>1_(thj%hSSV;@?Q*q8rp6br;r%u at 9+O}
zJhV!xb5{UpjH?J2GuW`BK%>|2-B2Eq!;U#YOJQigBezj`rWSvSBr~!)_UMNnsa{{D
z9~D)Til4yGb!j`ZE#gINuyxRFTBF+6uH>5F_z*^CZRpXCsUn?a+;OE<LUP6N)IjWA
znh1=WDPM}t(HyKmMhWjxSSe8IQ{C3G%LE`ZPLGdbHp$fZ94>Dw16FdOz|kMVmE}YZ
z9S5Pbu-ovRIYz6D=L^2gr^?ChNf2iuazjni7R{gsLU3UIraRd;aK9ADbn7=qP-;;V
z=*hC%)5PJpLHWJCk37J^qC-l<5Di-}#iyc)>VB8j2;+G9nn1`raW=@ehV^gBoLLD^
z{2#8r)AC!tQM1PhK=ml++h?^0?1!rla~(?e8_0mW|9aF%`*T!EhVVwBmA%f^DbWXR
zP!|1_K(-NDeX=!N&O9dJ2I}R<kN_JW?i54?g$D807MfhCXPR1_VaGtL?fbL>9>gGf
z&o$)e{MALh3{yu8RY#df_WLCVVN47=O3~+U9SV01z&;s%rK)+h^=YxH+2%T+B at TB^
z04+h8GeEQb;<ymrh2>K0zF$&{WN``csMUcD?U)*;B<A9(ogWC37?8Aqw?#bY9M~Yg
zTl>jKa(g<|Bo=P&rii7-j~@pny%R%ME-NW;9K-Qt<E~^LmVFh-;2tsnV{bk-m|MjT
z!ZtoVis%)w(qE|AgOC6p`t}=Rf%YujZ{B1>one#<)?Tu&b<txj__NfKsK*vS at QCje
zswgKTg6pLSyQ1xeGAg$N;S56z+3IGr8>6iaASKn}?xHJ+D%f);9fs6ubG;;D at +4xA
zT5$a+?&$m8^|fCKgfn^@4uo35G-TZSZq65=k%zG<vVPU<F;+^;WBR&OyayE5Akd8r
zcp}jrY>gQXH%ZG!1I{2ApT>;GhnC5<yU6IgaEqz*{9nwy2T+w+w=KFwZDX6Wg4kjJ
z1QkU<Kxq>q3IZaMwMimKkeummvj~bvkff3%xs{y31WHs9kPIRqIp=i8+}Q8`&#U*&
z{p-G4bstsdoIV1ZFRV4!oMVnLW&z~L74P6ED`?q%uH0~6UT0q<ig%yR84l<GQhnVb
zhWD)iPNn``dc~AD$@!bq;3Ot}MOfm=3hWt{8>j*5d(+Vj%56&yz^w+!b7A-flKTWs
zjq8Qg7|f1U>;!i5VvPTU7k|g#rZReAVRWW;is=5@|K-b>;%rit?l8Cxime<v{uwRt
zSP>xUrP|;81NjdM!Dti^;lO at v(cd at k{~_mf1%fN#s(^2Jm;`T;F%Q6O(T80~u|}yT
zA;K at PKK>H-K%6AL+31ReKYO;_0kTp`>rvI$57vCON=46dAnf48hkh7Z{)H!Zzspks
ztb1fw{u`dNIrbF at i9cWde1r^Pkn7v8&qI7B0T42U_UEL_#WS%Q4Z!`Aa2RW*;+=xL
zJgH$PP&L`O)}j;y3E42w%Jz41w|NsC;y9Io2J|78^#6q<D|&^aZAuLA)L~H4&aWo^
zO~?=j8qRMXdW{Wr5v_+*86Xc`1h7SD4{qQI!iIX9wH)Br65u-nLzz?RFi0iiR4VU4
ziV>||B2)~M=ZUVVNoGqtFmy6NA~Nx at S-Q5`|8N1oaV5P6ps1h7{6qL}0qI9fQlJk+
z2a{ZSinoS at p(O2kQSS*aHY^x2?<Qj!9GoYI7EHa_I9c~u9MO%uoL;dWC<KYYfT9er
zOUR)L84I-xsDprNT^@B{9FU)4IyJ0DgqGE1q&mIP1|kbF$}J7Y5glstAS*h9ML<kO
z)b8Pkzi27%zPx=7vQDhaD<hMDDY3MoohJJNL(3e8>*v6V{t|lmv__%LvuZ9H1#I8{
zML{+kB{+0x-~D&%W~OV!qkRzO*g$^Yvo+`_sk=9W at nSh#?v4v!zcqKrk5?eq`&H@~
zHp7C68fqtR;;t=&P)d6wy|}peE~+9C3nwcL%J(BtMC+2<Nv|!^8KagVA%{_Ow^ry(
zgYt$>o;<mi(xR3jd9)ZB5U at S%x1pF9NYBB7<@><$L2n#UR|8S}^B9?;_8*{~fL20X
zPmvL%t43u_24>t~&@_xm9yzjxgv>4RNW2m=dH0}9%8&KLR#3G)sI)^P?dv^l$aAct
zuiKphsJu|>7^Fvu0N@!(f3KvJ;xib3D^{%VXtqP=o+NpBT`;{2MH4!(QcD<)pFr`7
zLBdE^KM_Erx*K!SS9uVt0&Sd;!nJye(JG3FaaKtcYiBn=Gu~&tAQ0ee8`#fQc4@!_
zQLBUlPcW)I2wjC)Q$BZGauxDc;Exsc7D|I9WV$h*jdd`FlVS)PHK6Nd>x(mc5O-D5
ztY1<G01bBOE1-R=03j(s!dP8MdJV9RNir8YCYpK){198n3B(Kg?66-;P<oJ&Se}`v
z02%=pQV at YMouly<e3608k#y${&)>W?_I;<)yI(Ibx=YSwnhujA&2TsEe)bFEG+{Fk
z1dv_1R}N&hE$A>Pfr$mUTQq->?8C{*aq#U;o|IBuzyi0k#Ce(5Z2?MPV`$b1k~cQt
zsT7YA9~lF%WU(bC`W48D2_}OtgYSd#qY1OaGvK^F!3o*%`76pbVl?0odUVh!gECB0
zaa}kVJtmDJ(bqs&Bd>OJk0g;9DFO2Qv#M{g)9~M9JOp*MVtsu*|6QPM&p~7$<Rlyn
zsM+!x{q~@BQvd}&@!nb|$fE!|VXx`8BeQ=|>0=gQ=Kx<1!iy(TIDvVWPGbATWBvj&
zYCEiKBlUrEZL}Kc;>8VTU7B(I!kQX>Himrx$)nL6x`?je$n(FhkI?}?&{8akltB>?
zYGPhb3K}*J2%l6s5Sop=^9PI|tri`=JMET*w;qIo8Jo5B*0unXWaVa863LTC2x2CZ
z)lldXsJjUC9t|#X<$y;BvEL$rkje;k+>XKekJd<6A;AQC1*FaS$)ccw7(`iG4q(?~
z+Z?0pFNZhiLNtDdJQ2z07Tbbs)uEIDQGy;W1QXBx(9$YF_QuA1qtqmCX_<gZG87ES
z?bN!2Jsm7KK$29%F2)BVY&#+v^;FnTLKlBhDVbU!k#j=%m1B;8cZzR)LSRlmo0A at l
z1B|$|<TMANfL$tSfu!68eI>D!+-Cps3$<C1<kj%MlR<<pf$g!eSG at xM6lCvVaI-V^
zViURsJ9q>ujmw`WRc<izLr}$lAjAvRb!CX~Uf4CIo&)qs%$uDo<Dv0Ys=4?xjP1+t
zXQ^9|YK=gw7^5w<^9(4YjPX_2g7`Z68kW7M8jy(Z_<n-^!ECzCJe&r3B(YR2dx#E<
z8nyS(QGDB3oB#?2!@h=>nf4T?Q0g%BplK{8rt_|-6Yv!{2>LzkRLdUVZ<jE>MT2$V
z?OM(1JtNo-A)<sr(MixRC2K8qpaZ|T04+D8n|t~KtgAtuf6n5d4=F{QkwV&gWyV>$
z^dwh4GCE?c;70yRrUanm)OX0^Uz}^F$HzQ=KX>86F90c{u=#CMSKwP&i~e~Y1XUu8
zpTTk+u!KJj!<qZ%EfH*}h>8x at Q-`S4N1+lWZ$}J%h;f6`7F=EmXm*ms`DF1I7-FwE
z{!cSRSS$+$c%CIdVCz{Fh)U$X(-aDOq6#>dk&7s at wH_8}0=L1zD)b+L8^;YveI=gf
zc^_;@V=ubZovfzhBTAV-5o56~@UL0RHju3s>+Aoh!yD at gR?Y3ToWZEeBYps41rbN^
z`jb(BCraZ7UQlJ&+YJh|Z7Qu9e63iDg_U*0M?mMyb2SnA1<xeQjz@<3d|{8ba>d)s
z$r;@{$I}6W*h at KISaUt`4t`1El|DKKWX%pgPI6+eY^2X}u0>~x{)4{$w-QQNpZNcU
z-|@fIIE$|4|GyVAO=V%!`5<~-1gmfn6Y4z`mOpDaPL0qm0&UQp_hAbsP at U1a@}ENt
z|D6ZJaEPsFHc_J44w$!sZxH)}hkh<;=tT&SIEkgJf%YQ)Cgz~oqyjwU#k4P5k`RlQ
z(>;@9{*_wrBM(A4xgZit5E<5TR$x8YO@|eZWTU$S!OE;ZKRosG*ATW~wP|Ie28 at WT
z at z|!Fz&gcQk#GE}C~pZ`0V`LmIKwER>&Z&LL4nmd at FE=IX)1zO_6rtN$T&Csjg2j!
z?iP0u33CAYot5VW>DNq*X_GVRB!BsJU9ht=BdkW$q)sBNmeO6udzLR9<DfhSnUHQb
zd?@DUN0R;xf6FxVehuJlaiHMWe){Z*vO?gn4;<{CoqPF*O@<zN-`CDeoACYfO_Zn4
z5L#_Aavr`>q$k2CoW6`3y%lFe(Ex}*V{X$~ilvMp7TV2lBo|#CjkKf|!9~+vdw;RK
z_OcekvFsV>l$Jff|BxoxJo$}&t=nn(L3xy)7(}iRfheZ&j3kJR at t=1EF8 at xXG_67`
zx4m$dDce84MOLdg=)1<v5bjIDWH;_)ohpn;zW0^0LHP>+z2+!hcrRk5-x5?_)bDU7
zqhR8+YCNCo97`^G9n0|d>Yg&-FK at hh24lMlmENdbSrj(ShJ*CxZgZT)p;2`fXA17b
zI&~pqgodrq;Rm7xS=At%y#M>c8Uhri`Eb7UjH at u^Mi>N~QUvDrIcV{Cpw~DxmO0gj
z1FQEwX2G!7PxN$uE=4os4?OBAanpwqBXji+VtFx6zX0%G0=YITJ~9}NZqp|;zQy=2
zqt>PmH~Q!Q2TM)*=l}l4&p`&Z6{+-afdLZp8h&0)WDg0Eq9_5tP&gVBfPB&0)vBp6
zx at e*Bn~hDDauas+{7imkA at m3SCt<W|`JxTN=TmYfQ0t_#Z1%=kq`o>Ou(Nd591CDB
zJ}{hBsl&#vWkicB<KJ(UbyzTl?~vB4atp&*wxLT3KQk;!?`Qh!KfZ5!4cHzLha2bP
z!yU@<C|iiQM14#GK+N+|H?D-QE(|`Np%DUV#C5c~pMuqus~fwrciVRAuL8$m65x#N
z at +1*YP(|Prf_;z{+{5907A+4e5OHNUrnIbV8I3d|1q<FWu#HD2Ja^bMi$(%AK&Br;
zr7s*mk`nXy%mI}VdzolVa9w@|3Kf|<od8q|c{W++!KC^lh!3pg1S0sgv#Q8xmn~cN
zCDqCp!B86hQ1j=_lSBGUainFZ)5x6+$W9JLQq|_X8jQ=Ni^JXZ(1xIP at NA@p-KG{H
zCieSUG|O3#>+^|G64}4RP8YR-zm^N&+x_;LTtO)1vQdkuMHqu*VAEvY-- at 86Q+t2&
zKHmbc{2#G~nO!2UG=xM~(S~gpG&7okls)rVPClTr({)28rQpT5fG)Eh7s_7{O`bP^
zM|k^f7pS7A*#q(O8f<;5ma%#8uOsM%D&qGA1r}{JKn8^hCZJLS2M!|vUGRE at 6%~+g
zJMAf3 at Rv|?LgG|_7!>2GLsrctAZ$xt+6RY6)8+%X^X<0h5J|h0L4rcjL-Uo`Gq%AE
z3IGY=F<knXQ>22_I=}|)muCkjT4X&-TloM)6Mv&We^1eNw4TFvLyjVk!hf$;_QFhN
zju)KGuw*6BG==*~F`gHnS2j~KQv<bJDXPBl!Nge^6N9R>M99wq$Zf;tuc)kuS%C_J
zG`NTp7xgdWwG$Qyl2<5*c>4tjm?YD7i1*Ix^U?CQm%NvVu%C6G?B%e5lrp-cf!cy3
z6#-tJKFRGGHGm1jxg(rXW|h#g;E<4T0Plnv=4k;<BsDZD at v+O|89Ojri;h10bc-AZ
z_yc5uM at STy=qpxyKR9)12nyN=yhXI{ALS&&kCDo1;OUir<xaLi at 9`N79CZ#a at VrQq
zi3e4J0J39xl^LJEhL)iomg at VKAsQA%R3zz<<;#|- at qN%+bNvaHb#h5nMkVa0{4{Q9
zc(nHDKuOhFlb)JWFqq1R`U~T5{B%arXq-W7d2HC0g2BIDfTsi6NO{l(GWEjq=8GWv
zO=l*{`cfYdelhIe$rOjmPAE~x2DN$&*&$Attx~pif6gIafZDaOjuW<|TsF$b^WLG}
zqvB0<H#*wh8Vg_m26|u|gh1%5VqA{`2}sBd8vLqp-Ie|5e3AinW at L^Re&HkzLcw(E
zDB~Tp<n7G-LbTeB3PJK3gIbPC+uF%NAwty5+rcY(inR?^*R>{yAx*70ub`{a4{(wM
z>NK<t$}*~FfvTcmejMw)jHpnfdNn*~=nNW9CZkg`T3I_8irS_XFccaMABh47J{lHZ
z!G!>L<iD$LrgZuA5gVJuHpqa^oVyWvLI4)S=Z9)QRTCAv7pwijJsX0=j_eKa2%0;8
zevF+HO!ajFpFm$Q+j31^HIW%;22K5pV6=P+&Bj4%y^HQYXYJt`{^Hu7%34jYCob|l
z3G&wP2v*1?h&Fj at H^8D~FU?3S-hh)^0OZ5@{d-o#0WlHvlO at x}yY!#_bhFtg%v_KW
z1R)9GFZ=f6<Cj!TA~0aFc<Tj#F0&5ZHUaj7Xrg<y<=)xJKG!hx#bkgv7j(}3V<5%s
zh+EhD<_T4sN7wVB>3AR##}|v^kcPZ*9aK3j-pKn95%c(I41qXAWR^YTYpbSrf%+Hx
zn1!~Q`BPB at N?xM~4I%pkb-ytV`e7aMj8<TKixS0&s|tn5I`WdO6(g<+ at U8)(j;X^S
zvjm`s`12B9V2L{W18M)llSduV*K9w*zU1%<@)%;C%vn!vDWaAF6MNKEJ`*}9qBNn6
z(*B$<9vIlYOxuV1VboCOR2PeWLPz(b@&p0*egtxn4aHEvrecOsnA-C^--T~Jl0BB~
zWeA2N<U?*N*Z`@}`%uc4an^08FN8IC`0eEWLLwXeJ^OZ&|2>PuNkeqdgs-%)^$lw3
z158+5SdKdb-j*U>a}tTwsvYMZ1JVks*$9d@`P{$z^^M8s3q86t)`^^@*BC#?3}lg0
z4PY#p31=HN+CfyAXJJ!}Jm=)bWsm`!z<FZ9U52+z!$mVAa+E*|piu at aJfRi%lVx%_
zYmiN7WR)Al*~l)E6vK9!m|rvkgtQ>pJ&n9bFexnt{2~bRi+`B_?Kz5vGGAve%EE`E
z(jF<hE^^H`I2vE>jg_6M;k_ClNABJOa1Hb_11fU~2c4s$8<W^_Eoyea3j3;ExiHkq
ze7AoeJnzg!!xF(%@XmJVaBd(GnOG<y0V#IW$API(;9RLgDcZC~A at E^YKn*}fQ=60M
z>Z-#d%Ha9xrlV+*hW21OW at 0ZMN8W=g_Rl#qiJV?Mym4w+(#;G;45j=D24(zieYSUk
z<}5)AnEU&Q4Uxe6z_YF^{fdL$JNv<d2jblG=<eKD at k|*j&D=T~Y&?Fqd2n*Mg9ZuR
zAv+WX{AXizPazqoj<$z=5!FBwq4=BN1gCzTxmfI8bAnW%K;@-(pZ>o0^f4Hop*^IO
zM$U3g?XF1dOmBZk&(NA1i={yE_y-F}P==n(%9 at Xh>+N2Rr$^>_We=a2S+o|E{}lAe
z)vKx>CIq++#oO8=a3(@Vx;u6F at M3XoDaY7o9FQs6QbxuXLH5Fy(OX>$muhrr&X0CK
zePJUY$?m`Bm8SsRnbY*0(e4;|6sd*C+;+|8R?yanu*hH_(p{y(nvpq5B!;GrVGlZ9
z;plqu$UVJ!d-YDoX7cC-Xhz%^^kczYfHGVj-HXmN;>G}7Mul{D?VfCYD`XN-6)b3I
zQ0B)-IO2%4#3Qqd0Jch$H4W?f+0oFT at -AN8yWdabARhHzhvVOVyf}xeWE_?LdD7zJ
zZj`ajEC^hix<5N=X=~($4k1nSPu+S`L~F`gdlUir?zvlOn84;xXNGq#ws`5F4t#W}
zdliC%*GFRt{PTfNk{hYJ=iXo2VMB&9fT&y1l0J*Ulc$tEsBU4#{^lo#j|CZcQs^a~
zgPjLW^mI0+r<D}8_Bsj`zouuKyvi~L3QgiRIy%}%b7)$CRmQ9m;^ocb9g07MI*67W
zVYukly&sx at 9Qq4Fd_1U^Qd17yt55`CfnNlWXJaJWxJb4+soa`{nK?V1mqt=}d#<GF
z)$j4f>3aZLR<CO|7#NOtS~WZvN+x#zm1z_N1hWUcve#XI0wCog at +Io?fZ6?r{^i-b
zbJ7RSQ~l-~Pj$%YBf{u0v}jc0R5!ZYhh_6HXr|-+OvDue??;QACWELZ!v~!KnxmF$
z3hFhr<8U;@Mm_(_y8+oDM<XrIy7ki^c=g5&-)wYk#B<v^b5&@ah*bQhhlnDuFepm{
zN?)F;#VXFYctKRic)5qj*%q)eCCZd}qY+xv_d;7L_rr%zNIN_*@=!`VpwKk7$8}PS
z_V{*{f3CdT7Y?#=8df=DD&iTrpI(LFqp)Mg4}*n;&TJ^aV12;f<eh=z98lwLU~KL;
z%m7oc1$@!C;On3Y+wQF~bWKgUvXS*F367IkDo0!sj7`cB&mAK_48cMiq(?E6_s`k}
zB_xS^(`&H{7exQ!q=ZH~QVm%ox5elwKF0CllVOY%GYWOHct$Pq>naZ4fPm-75h~xQ
zSBKTyf9+R^KgDRL*!cJ+%VP6V3!0v`9%a=%I2L#}u-hsxnd9flqj-W$&+b4$UD<2*
zJE`T79XzH!t41y0{+uCU)UuUY?1F9RUbI>krmk$N;=gUpiKjH(t9SnGI~H)l9e-do
z=**h(*8XHuWQOM`qZSgpyZVbI^p9~b at 1Vb0)HN76v=ZAD=E#rq%}Q?9KK=?`Mx~Y&
zdB`COeRq8wP<ixj(41uf99Jp8kKd*m_vmr7&QCUwwIpvX@>X%~oaR<j&!7%bG38`G
zFGSqbbExBBl&j1+^tU;foxYR5Tn`&#N>4fL`rfGq-_3{mI5e69Jj^986m>k!{!|}_
zV8z2i$?KS`*L}4gBe(V*up2b=GK1R|^~i8y#NsvUuB*k-^=B0muxu!=8 at xsi2Wm7P
zu<6x?<Cw7hi0y-3B&U|UC3&;d$%m%b8>quOb7^06fcD#4H%3g~RG<@j&6|{{lxL0j
zcK$7xNX&TX>h^G5qp>{F$#mu-HyKeBFQn5PpP;)s5SE=7T%v&Dlnj5>#gI?RiVt`!
zeDh*FU?>F{;G at YM1!vP!wQ#P7-Uw`JgjJs+9*DX<1g7&B#x-f?EwD3ME%@(bh;}o=
zv80JO{rKiu0qvXm_HS=4C7Ue;5%NfZ0bh}$vRf?5Qk~V5-oVxgzB&dY6B-T!ipc76
z`7;nw;NknZK^LZWW#DXVBra``Sj`~jgkD0glUl`<A_(r(11>hed0{EqRSoG;2v8^Q
zeIE-T|35 at Zl@>usr|VUUU(HgV-Ewh>yF=`C48;YxWxClgd6l&c@{y!qMyg_}HL?s`
zY7`8 at cNg^_yHY>^CfP-1RE{#s_SPQq8!~!|$ABW7@*iSKn$a5n0?%4wTRu!QMfpu_
zWoePvn3y=kOG at E!dKNF(nf4f4MMds;8Q6?6<QPLe26RQqB!^$zg)kp- at WKI7u72m{
z&5z4v#V#o0){JQWraA0@#A=7Y0n-PZ7HY<Q;D82t)$vhV!@HX;<%%)(rFa<i5|IEf
zAo?V#$j=~+SxZpdVI?!1MBjaHwzw at -Q@8TT4z;9 at Ej?7|`A39<Pd*AWE`8e$kW)^h
zq at gkne;LFHGf3gio=DGt?v}yHkUH}FnG?6s`VJ!wF?Qc48~|M|yHzbZ<|AGzgH1%7
zkd}C&NBv|P;NU#vqyd79`A7gbd2&$CoMLuhWHk0IO+F&?7<~5!iR?@pu45^i!|Ry(
zpEUXzO#LCz0a6mh>J?FMEpK2r1{6 at _vqOc=?cl%@iyYS~15QRUkOQzl&2erK3P;0@
z$e<A`jT`!oz0IheqTtZtX27c)^WA?c9TA;4ryy^$OhSMma%09kh#j8^Ou_Cab$w at v
zCW>}q_cz!&GG8<&?3@($@j~lFv<mTpTZ(uJaJMHlAv)DQr9C$ej=yTykH=mYC^oed
z*y`yYgsmb<=;QfVmXVz}ihFprZmt!>fD*C|Ag6nzu*x_Fi$NZG_~?<!_MruH=h7fx
zyqzsKBFl&1 at qrV6<q7el at 9<{H8=RzK9UHI=N;D^XS4+3rbi|kK1 at A+2$`2+pBy(!C
z8FO<QKa4XZF*vlAw>??i146?VWQ{lQjyqWWu(}(BTSzP=K_$&o>FCMa=fr#FS)JE_
zaL}P^^Qk}E;we0P3oL8FZCRw0^2V0n2&!X{D5<(LQJNF9ASpr&7n~a^@@{L5^E;k?
zhi<ME<z*YSn;3Ph=Gf^Ya1SR8NFH%gjblBe3rL>Sur|9ZZT$vdt4kiHK)!dz*@2RE
z326s;^U_q%56U>Q2=EM2teYe>m^K=)t3UK>;8v9^sE4H{2wPj2F1-6}n{TaUw0g_G
zwf)f`#Z??Ugwn_Pw<y>FkT)b&9o$H^gk{r!U>Yg`Bd_rc4n4xb;0Hxr<GuJu8q!BB
z7bJ-qkB7+JjqJYDA at wj4ym}aeZh at B2zfy%wp2m3LD<nd$=~3qr(*qz#XdP^AN47`P
zA4pjMF7<-%iCf790>%sE^FmqwrIXlvq-29<O=Yj`hMv+YexCof&ksNt*rdeL73VQ-
zrvt$E(Y&9~9e5Bcet6C`IrX2lsNwaKC9dSg%qu7;0o+1jTzw!!`%S-H#Q-(C=3QSv
zw;-e)a2g40aiOGJ0)^Nvx%V&fEJwM9!KqTjZos^XCwO{4aC(te7(Hj&9w1w^P*#dx
zg=B|LQ#<=ESpWY(BRKAk6aIgsdmsFrU{{c8cKsDXqXi-X=x4NI06vr;#f^ZS<@Wvi
zD;gfvO(Fk=LYPPD+fNvsl1&PACOb_M>KC134GWa`l+7v(@aF&L^7+YwgPo!WA_Tgo
zrbIVwGUxt$f&0naS@)j)wS92a5tEkfH&<NfI at +ap&UX8g*)!y3aDV>p`PBI-XVPuw
z6~EvA?auLse{6r^wM71SVb@}(`UQnPyBfKgPxjg#;OILy^hl&^B;Vw at TJvbWU>Q0H
zj0N{_LQa2Wv2p#IYJ1+liO^qTn9%gsfBxgUVA5rWl)m>SoJK`i67fYx|5rYU^@soS
zzx&_*xWvtBoJ4G8Se*Sx at +;VXxpEV%5&#!1&r>^NL|1(0#M;4*JoDtxHBgVVt%Tpt
zKprAW3HtD#R|)LHQCtjwynWG3k%eU&+OsU^`DHEt{TGGpm{U)7;^YEkwdQ>jd36$M
z3UJJWtFgdWiOw2uv=lKu*Ei^}%u5{1L}<yJnoQ-Q<B!znI4-DTg6~_dUb^&x6(N7!
z%jj*?ZO2eSC$f(riR1MPP*9#^V$wH_1^|v<$<A?wCZOXKJBgWf6`4+%TrI{<m<a at u
z4~jMd%=bys$7OLJr&faGS18-ikTBj_0YjK*6t@?lI^}_*banj<q2*oZ!BbtqB?aRm
zoc4cHbh&o*h011p#J%GCv~CiJ&r8BLL=R9}s!zr(MoR!`U%aST)=}GU4){HyF>(=o
zYMrnN=Pg=QoHsTj)H4iw;H#sLJcuTaf#5<qdz?B3z%mF9!9`fX?+r6MR&j%L0(j1o
z3nOf$Ah0?OjQ~7M`F%Ijd%0Iax8uBnY+*2&<su$?;+6`e9ues8eP!pUi|>CshBpo&
zqYC&izrr{JFzvGGOPRBYE+ytIfO=w?VmPcMaPiX^JP8_S2>vw^9Xrb#bB6gaCIUs9
z0({;PS2jr at b@fDJEDTCpWeiZ9ezKggtjFR5d`^oFROzP<5V}(%1b5>pEt}@HX7?df
ztR7s5VMOS=1l2gAuc7M_+=zrO>tY1np>Pre`3Yz9VJt_X<sC at pXhL%PqQ&pc at h><A
z-1b5ZN&td8EDbM%<8$Ad)?p0yGK8Njd1O80TY-`x9P1l%7h$ccOQ$2v{!4u`Go}hD
zE!_Ke;DJ%j;~osc6|r9~6^Gs}_(bX23)Z4Le+w+~9{_PbLCbBW`qTkgG at 0k%eiG<@
z*hS9*-**oNut+H(42_b1{yH0L&3YkWBBLK$#8nbPOMQj_E*wdXAPl*helVJExw(}A
zXG8`hOe9hFemZ;6nB%I!ML07gDP#<PM+*38*M+~f!ut$;ODU(V6*(AELlQvxj8xl!
z2x9rt&0r_E2V+DU!m|qa`$^MR(><GYH4jlm8uWhuKt(=$r+#ZGIx>dD-vSp`xq*F&
z_2=bX=meC2ytZY+#~Q}+!5nt&yM2SG at mBXM>(Oq;XoHW)vzeg#3?&5D0YvY|>!?`2
z;oh&_4nAlOEC(}L#Z9dD=FdMpi~jVzO`hqDm{J6ey-?qHY2JUKM%YK4J;hvS?%2ER
zq-_Fn at dG5Y7b5#P$E0hw)ic*GqbH2)Jx+vjIfgE4saFPXtEhDxy9|SX-`xp!gx-Wy
zbBXx9W)Zu=sI4-7KisW1!YL12USl(J`c)%V^gZrQ9bGI2+IaAfc)%szoi!7D`(3vz
zvu2=g6U5>SVLT~3$<fvi22M!Z4*?`rRE$37H%il7y?{2LUOx>V1y);$WEJaBW&zBN
zMskatX%b130$}a%(Pix(pb){pM2PW98v=+R77#v6WF0-6E6-rGfa{lqkhu)NFP9Wn
z=h-u7R@}1WWNbL-s0LDA8edNhYyoJf3gwZkYvGh+UCg2f0T<oCo<wbq- at H`v8L-Fk
zxS2D4{M?1)HHjEpbutYcNfm%?h)($1oRYNNBo^IAkimPo1fU1{{D-7hQ2 at iQ3{zHu
z0kM~F*u-$!fI<K(!$K;}ZS9_82tzM_egr3d#6GY8Tbx2`<uKwD=ch&5hbg)v0|^7q
znO9Iyky@~zdJupPHXpVkt|Uf~mX@|c%dJ5gND6BPcNzhzk8J?=sr7gYzBK-b0<B5?
zYu{T##HB=xhxLiy^m8m{ZPpl{pYb17g{4Sbwn$M?2y%W2D|BD|x?z)ZR6iNLRwbDd
zmkr>#hp3eijSoXru2>$U)3J!^=J#i5o!vWybr$sWX&f9%rQ|^XAv^PB9SoY-3EH~>
zc>Mwk8+5-p{Oj1j at 0PPRKAW2DQwIb%;z)9Z!}yfQ=+py7cNdGJj*BD)*gHmBYx)}V
zXxf<pih0rtOyAIqyEtqaGjew=grZa)7gvIH%O!>07Y*ViWohGw2RTi1X9$;Lm*azu
zQD4kG801>u%|^hR at 1ggs&szEt=UL0dSxPo;@x}vc$gl5lksOgVD%ZN<R~*e{_ at r6x
zDBy^Yow%h2%*|-@?!qBy+b2nZb=E3+MYHY!yt;_jLQ{OW!qGCvZ7sfK$#5J)O1T$s
zJZx-_xu1C~F=L`HaOw=v7=w>5oem&uGij}}WdU-b2Z;*%l)E|fdy%Li$S2|9PR#@O
z$$S2W6>(DN4HN@*-y(&~^vl$E(G>kv9 at u$L2bIEO6c^{H(qy28Yo7urkaNe}_}w(z
zm~IPTrZ(<9CKd at aH>_m<wt8``<Wo6A-C3d*)6A#AU+B(+SI}i`xOrqXBdqSuLHtXW
z83iSiC7xFpb!T>5rZll?E$fGz3+B(5HGiKm0iacMh&$h<Ng_BV$wqSe>BCHy1O&HN
z at m<0doG+YygS4~Jo#c`N<@F;j@#r_oDW|u;VK+)*)*Rp%?OVYImv>O(8VSc4RJ`=)
zih{S*&~c7di<CQn_b{~SBLG(AKG^0~u$0Ov<vX-mlrI8j0+rtbohP0*yU^D=V9`~h
zPQyx&`{VFr*t=ua9?}#2|M!)NPmB45ZZ;+h1qUX5Iqdlq at N<vgr6>T!rBB*%Kfv1U
z_U+H8z_H8zJwc*fh7Y-y%-TY?947{pP$<h_+U;o-m5PERW7ys-anhTa&L{CHU~0br
zX>Yp}F^3`ZJ<fVE<*dLc at CyA%B50sd2uU~v4_nY230{F%uAH5Np?wRCLiC at Hlm8v~
zz+6(mu825KL~Oj1JS=QnjREB)S%>~D7S*1NgJ at NQZV5deY&vH?oPJ0&$Qq6-9OpUp
z7KtgctP3CTejnY=`9A?35p)F^sw+u55YrKGPY|Mlze^8h!zRFY$R|tSt^)5PUMccW
z2kTsR`nFiXVcY~|D>X2-e1ak6Mey`XI=j*Fr)jPz{}Ef-Fx1067%7-OV#|L?lDdDT
zmt$`N935zg+#cQh)AI74 at mTTqNLr1E>g;?EkM)3k63(P8Qdl+#&<`9>L!{;8WIcxk
zWHAlI$3*q1I3`&Vc7i2Gp^r at -@*0|G^?&6>Fe|=@dDE<PWXWlI2z7t{TS^r6uk;Gj
z1J0t&O%EaF8kA08V=Au`wT$}q?HiZWVzF-LUlwzaARCzm9;k^PZL;@SI2I_^BR*UT
zY<;*|$POHoiZd|Q!QyvrCyb5o12UmRHGAA0jtx=B%iSsAa}HwN&|AtYF1()Qbz}@@
zUdf9Khv`@SHi`Ef_$ROWLWv2oPg${^tJ5*$Io*uO9lR at jFl7EcB?3#@9NA4dF7*3J
zVmyG-@)$WAkVdJ`fwzX>CrxeU>Bu;KkZ$B2jW`2oVI<**9dM|<c&%g$L_cybn2K<)
zS;}Y}EBcqxqkYB$|H_;2FgOuhoj341lzzwM8%x)~Z9txw at N}X1-VRcuAjeW<PQg>U
z?23e)AwmI3!u4(MEXI=I&qI~o=yZb|#PxFF8hp2%a-DlY-j}n6ex{TEB&PPJ&_WW7
zrW4fmuPhYX^}(!4dMyDo^uZA$Q374lK?os449Lt;@`Oak0_XZ>8d+13X0zvmC1dV+
z{F at S7OyGGPK@vXriBb!e`bSvEbkcN(YrNS-`f2hr`gRk0 at t*o_U_VQiU{5dsu&Bbn
zmKauI2Rae&aW;4oDghuviq at nccmeU4o)i0eHskAdctyh0q6`4*LvQbANVAA<LmMAn
zIBlll<RCDKxs5ccR0Z5Bkg4w9lA~oWN@<Eo8a2jHT?tK1K`nqhENG#d6nZ-}aUAY8
zZAio2gK-h$MTVpB?CH~|b+2P`t~36q0hx8eXaoG16<~p&@kd$VP?eeN^_)=9Z!kEl
z0#+Bn2Qy(qYZ;B`|7hhC`qL7$K!q#N41$wXW at Ro3b!g_oZU+bG8n7M645&(tjT8PA
zIOex}TEq|`qUm1U{53zTu_UD8i0afVu+4`j3C2-YR_4+}rqdRAN$%|zc(6;HX+duw
zvrjrsbxIXUz=b5WyI?Btzh;Q?uy5{%?+~xB_ho4YXBf=Oo&hy%L(VL28;5$$w$B12
zu at r!pG(NK|#1$DF4PBD^lWlg40OixO=2Ai+Nu?MS#;AUM4oqR0wql<u0>3A}VoK*R
zcfpJ6XFmAxXG*D~^A)9y$-nB=6Q at ooLKjaaq3F4BV`MbhIRi_s=9qfBT=pUYISxD7
zRmZ?zb(WC8;;s`0PE6BV&4C*))D%K5kcIrQf;Y%B6ueQ=9eWDFsU#>hz66Tm6sb9x
zmWY`;NRdcAA|N(M;3#U?a7g`j++Kwn`_q|V4mnR4zT-KA-1DwM3r~b7gg_hbAHg>b
z(AodgUH at jFTrbdvU#qE*hF6kK0YW05HMEV`=3#p}YuQ8gL^}_wM(jW+R4D7jZTEga
z+E7c*p6CzrKortIeVrhb`90Tm;#aw(+BxSiOs=9HXhV~+pQk*)aRWA+^GdR6V!C&@
z$7z39hJ(F2(x(SM|31STi~B`2`T+wFled8%a)5mb!?J#m*@G|-Lqf(KI5c)vD>7kx
zi=?rLMv3?qUgJ7lEE+ at 98~i9vM*R%ENCKn0W+{Vn8_`yZK3GbTO(KCP3pOLykl_3S
z&6=!zgvGFkhsZb`%cw0Yj at _{8$ZW=YeGIHQgQEx|f!}te0Aay-t at Ar^@aG=M$8Pxg
z2l7JO*6^?$QVG&dg;$zIwHeMkQKe`}#i+XjrHw!(qawc=zreP54}z<5Ck{87tphGF
zU$hlEHMXF5 at I^0Y+)F3Y4bDlTRq9wk3q}pw(VT;m7nJ?!4=&tfiDTluGJbOaD{0u@
za3^wX6b|;4o5jSco^GGP5IG7?6e{Lm=;$XBa<KP2{QTM#{Gn$;E|=>o!~`ewkIPy3
zIFq=AdP(?4b!1-!xz<Sb&*69X8P~vwXjn93AJ_`;@KM5CGo#6_=qZ1=VePoN#+gZ)
z(Huk0axj>|_j=#CYsvYAZ%#viMa3uz`Yl{sRpVVaGi^Lv7K7^memhd6a{Ml%T>-sh
zAk!Z at cQLY-3i#DeLa>|D8#so8_!i0?^>kZB98vM2D;Njf2Oi9<-c;3(w`+i|ndOZ?
zH at x4q@N#X2f7 at b-1SP1fQV(OCdiO;sA5`y3<a5vtCPevH>~12n{o_#rF*U%bOIGI?
zI}$*l14dWfx$7jIo~+Vy;dchy>%dAw{alQhRpxMqAQF%3=x_5GQ6`XulW7B8ubkM4
zB*|mPi1qEmzJS5G9=GUUy@~Oj4KSdY;p+*g*2;)pVue#ndp&mL7OZ8brG`jxetv1s
zq2qP>>ji^ypXsk16a{{M{jZ>-+C+8$ucWu-J_gfR4Lj?gxuN#F2MAmx`>MKFiS$sC
z$Vv`~OlBWGxSloLV6-a+Esh;-*V?vsQ~A|cOUbn5joFOu8UN9hUATqA!RPs$VH!Zg
z4yt?kFB2@%r|^0@&aZRW{@Aqk`u%z>C?qUz%wtGMJPo|IGRYMyZxMyt>92E~Z(0A%
z_6iw#`=S{yR+JIGd|sTk^7PmF8UOa<6wrQtt)hc)`pbFt*S#f&@g9nCu*BgtPvAfx
zayx*~V5o`#0?A^9e8#p8B3T*n`Y_h};f}k;2+VZMQ<^~ZMSyMS6e+>N4cghzWm`^=
z3AimxP-yH*B#K1kb%E?O;tfH9tmde}gOZ8l955i@#n2&Q{-A~Q6bCmq5>iSQt2arz
zlb9GW`x26L8dgOq7Rg0VKRHCSWiq8ETRvp}r_m1XSX6dJ=8^%Za3s)2=nh4N*@EMz
z3?D(=I~wFA at h2OB2K2Y+L__dDd*sNG(02{devW+gg??XZoZD&o0n+M^2y6qu3TTup
zU<7KlkR=N6wbTuL2>g`Z(x6)4Xiw>$iBN_yae#Xt6Kc{eBcO=`K4bXX0#asGfGUOh
zFBBGK^kDHnWf+VWhM>)h8-Df5=b-F+{T|`96F02rNul-b06HT57Ci*K4%Ar3(O50T
z-e#`G04!>Q137J9B$OxYke0n>J)>^V=9xGs_i(Mn*yHy<bU0uZaD7utLJr=bmQ*z~
zp?Gh5 at H=XSnC@*ntk#T|a2JWoT6DF|!i9ozV7Z_}Q^aG2bhqMQ@&-ysOcv%JdH$k_
zpPn3^(}3sQ`$G)9+1?08Cl1P`YXkFeGk3w7T|;y1m71U9uf7Bxo>?@d1a9tb at mj13
zBfDw at 3KyDa0rUQz?KS9Vu0^qR49295yDMLDU*>}c);TokdO$8%2km#y=sK8-KBrIG
z3`Ta0_h*q26~c7&tKqLVG;}$YX0xjmJ^&8B8N7rTGx$T6_D{6eX4b}-ef{7%IQVAq
z!8NED`7KI84uu%EyKMr=S?OFDHHM2K_$R^9PtqdaU$iXDF%lco at ttF&M4NFnxtG8-
z7IkW<{~J|^#&>b81%4J6oI#Up8~0Shhu0JfiYAsC9UMX+Tu(<wf$ek6Oe1h2TV1El
z0wwL<e{7ptaVJdp*KM@#{!<RsyxSiHo4-U5 at y(G%O#gf!N59AWL$2e#%`(ZFX1CE^
z^U0`Hohl__z;<*ZBm-$`<y|~sJ(V<>WLLj^8mWqB at 4hT><{6nlcFE!bpqHHdr4p>s
zz*ZIu)DLHn5LRb{nTzh{obC9~_&5#5Ty5n?CX`3EY at 7fI^PIdB5_kQH40Bs#dfCX@
zE`J9O6!z+NzaHB~K-oU-)_8s81x_0^H-gi13@^RYJ9vKZtSsbJ<CAIu7*PmEl|rVl
zQKOVQy8Q(li+d+WNgkl{vI1`uGuX{o6YQ~NRIl&>fcz>9qUE(fk630%)P^jQbcZ$*
zUa at 6BGs)zYc at _;(m2ORZP~A~bU56<%Mh7y(fS*6wDge{pw3JMfLstaujaIsR|8jK<
z$&(AVaBWX4jE7#B!fXQSo(4pT!5_7GURUodf3Cj=FJTv5X5i%DNt|K378)$ClDU(^
zp1M55a%iK>L%G-D7 at bT5D(pw2;KgtOaqk=lv%2j51!1!^Pk!E<uewnuk^q`j?M+DS
zOv%GE#n`feYD(@*9)`>tLha#QD1o8%%q;@|ZgWC9anjkS%VJf3f|4h5e}(EsFjZsP
zuXAG!lQl5kol_}hPdA at l#vmVFfAN;QAhd?EVIt6Jwj(h`!QC9eE>uV<-~gLQeP?h&
zDUiNAW;41#>+m*Sw)b7>jrVvsGYP0i at hk%%7xzJ7vzkDGEa<S4hMMdB-alx1!p;DS
z1APY+p8YA$ktJ+~JD7W0`MeJwBwCESxWcwpRZj?HS6lSqf!Pii57Pfx8MOR)OD2(e
zS|(D2++b*<;#p^@BDVJB9=TSJ$v3wI at F+OMzA}r#aq8jO3+=dD)_FBmA;-Yd<z>OS
z`zG`t^u<sUCK^6%(4 at jgNjYWsJn}Va3wZV7JFpMVY^?#9i-~I;@{>4n>=cVYfFsg1
zF*TXiMv%A(q$5H(mSMzlD1zoCbSzdKd6*sr!3A1A@~AGh3=lPiVj#lrA5spT7_%IK
z6dF{$+%J8?_a9U~QbZf_F?6!v(Q+0SJ$&$-bl7Cd!rzEqS}6eN@#juBH~4jMKAeS&
z2Xj67WiA;551?aCEf-0CI4Uw5#WHdy25g?}VFlg*AdcSs`?5Ad^dFwX1SAj+dO?HY
z1QzPxJ}$}K3lD>lvpZdLi0mk!3Ws;0DbKcnjelyRQlX}pro|38U;|-K-2U5`h((&G
zdiGc3Q)D#9!Z4b1J^3Qh at _2^Oyzj^_3=sv-u0btNh8w1xVbzaESdl4BBS|fk1~AA=
z5y2<D#f-2q*oIOok`84ItU8MXlQ;ly!;=9BXr3yU3)^UNu(Da1r%9|svb(KphV2<C
zNm|K|7*)Il(m5Qnt-zH(f)o-(gX2(2$fH2hG!;GtfCvGgX|O38s5Z4cC=DQjAXq8H
zI)DgiJ;9DRRQ8B>B8ZN{@WkKeNhI=SEUs^tb%?ftu2Z~D-YNv5lL+T!SZwCqb-xpk
zN5ZUC>(%xrM~CntEx-{QNiYGDF at LDa9^)~S-~uVHB3yJ3<$_?8_YC!Ts0Ca(<nTUT
zas{}2k244dh8?=T6g6}X6Aneykw^!UJu)##Z^oFiRN*CKyms<PUa at MGrRoS0TOjPB
zZkc=OOa~14LmrRcg6y6my%~{!7|)PO1HZEZ6L#_JA|V9fXA*Oc)o38p5o1Uk`@A9G
zC^i541E2{aUieIM2;_l2gn6y&iko|z3L<d^p28%oV$?XWB7FvIp$%CEO$Gw(`AT0r
z(OEsX6=KxIWEz7fH{V0|s3~Ed4i+~t(BiQ5d>hauas2^G4{4&ROUXR~NxnGmp~5pV
z988 at XyDj16L`Kv=zY7|Z0T~-$?NJBS at a96sl@~6dnX2i*E*Hj=W&VJkNZs)p{Ka=>
zwhC5$`3{?<{s`CpKnY)QC_Ku2+b-*JAr}}XW}1p5DucTyyhr*c$t8JT0$7*p0BsAQ
zj%ku3SDRya(#HH<4Mi2nEvRwz*Hxk(op?SbgH7_FUUmdi<R8`dAVJwh<By9QV94r%
z18QVtV5*J;U`nI0DR`~zBA*JkRx#uO1zS$DnM$qQmJr`x6np;FU*vS at LjI0zfjxzI
zw;dIsxS)Xu{yj1op6$c8diNBGHC#aj)=MMSdy-|W4!)_zP~L0z_4u|W2*IKl>)E?>
z2vu-x&sU&vzJp^Rg$YtTve*$o=X0J&>>q!BP%SU7wdD!p=idCmd~*t3ermPqW~a&V
zY&?85*K+iATC&T|?woT^v8*2l?p=U;mHm63(fN**zR+z7$t78|Cr_w0T at GxBvlhD`
zd9dxv<Qu6fK5nx%GGy6<-Fg3lxTeFvL%Fz%a>WhgQUAf+=K6(NcL5o8rpRTNjy!h(
zbi9p(YLQoEvopncUtlnNQf}|n)C=CsS{e>GmgX6l%Jqdtrkb+DCst_wYJNkNB61cV
zI8~^*{CtZW5*3 at VK^LTvblQXttmIew`W1w-GK+QBFHlajT{%WuVp|nBUu~A`S<oq1
zs}*5Sx`1s|Y|DX}4w-+LTRGJ1|A^T);j&V%5f`e?!2m|HM at KL$As*O>7TSl|2=M9q
zJDI>vjMlmBT+cD_ at Bwp+=r1OCLxSSX!0j9&y09sZp&g;tY5;2NyZd_VVF`)mouz4H
z%^@K69OSyt9L%||3=<YR`nr0Lh+sVjJR=4NNK<Pt+BKNV%S;k)!qYReNiVUJ(k>C~
z=roo@>+UWPBHJ at LfQDUuJ9^u at v|;+G-!GYnDjr)LmZb1H9eef|;+Lca%~9=0%B~dO
zQ1!CGu^_xbaGUGP^ixUOxVYAkBCW*^PUIPcl?K-Qod{gbnOAjLXQw+Cy(`%PpUWo8
zP#}XsTG+53EHmwO3ZQH|Jd(Tj=+ULU`k&v1WT2I2tzL_la(<mEW+c|G7vO+{pEU+`
zk4L=O)h^9Q>njuuZH`8^T&7t^S*!UzpUlfy>h60dKu4_axod4%_dP*(W$gM|Eank$
zZ`0m*?HmR_0I9vdliWM7RTabJTkL>VUuQkX#6)u6#zAEf&OCnqHzPe6^s|fm#lg2P
zZ|k$Wb2U}(%B9!f6L%VELV{q=oXYSnm<yC9cuP-M-fe^ZNQN%U=T){@;(%E at _;*0R
z2(l#w<?5pS=~E`RU6yqM-^vDTmKIS|-CTn)xYFO^|Mm2wk~HBBXHDjAwTFR$$MlzN
zM(v)Z=*g_-m%@rk!@_KrCoe~48xTLi>flxy%MM|OSj1+~OHg!~a8ou%id~?)%m(-+
zq7CjLJwks}gXxF at E3}aaFlbq%xpthTGK$u at 61ydVRr(`1R*Y3Oi<cv5CM&#Cfqho$
z7p>4M3K21Dn$=(NvBtz!HTDE at S+!ii<#E`lCq?ySQaytY3dstpZgfIq9)%z>?Rimq
zmlP~jfD+Epd>yOK8J7sf<R!Fx0YnyEZX~-appR;$k(A7k9bNJlg~+pf#TL?kMrkK>
z+NL1t`g+3YucTu)%13i<QE>RmOv^7Lzaxhk=@AHcNU%^EnF8Fi%d*Hr;%?3 at wkK0_
zXW<Z|;ZjODV5Ud{- at U@Ei8qb9TwC#?a&CA-yab09W);hkuoITwUA<MP+(L-$ixNyJ
z)PEzoD+ydxFd3yu0$!lhd$ob9qfs&d<~W&%gj5-towXwM3dJ>#De at ib%osCbeoHPv
z{0yQZ*8_EVdBc7P5<)O8y(A<JONx96i(cx?L7*S)a++$B*FaH2Y}K&+b|8|gkkM^m
zYw80?0)D`aFwY~!|NV!{1t-7)d#q0`rUD&)A{{Cx%7P>p7yp@=_&3QKsCCNUh|^gS
z%g({INaoMaHF(iMAT{G6%3~T696NFKB&owIGqO|1Yl#O0nz%k<hH?m6n?`|ViKfBI
zs<}Vb#O~`b*L70el6>ls4j0fkv=H*n_6W;8?%ya=26i^njawz|S&Q&iRGS at JGi92-
z^r&#Uy(F_jnn4K0Mo^v^7-U~ivnFk0W6XK6rJmns+go@%5Y?R7y4!c9=CjkA(A}tN
z*q<@l%3FNJ*nO~*=2(Xq;xy*i*wvX`|4>Q8)Mu%8F*=2B;>NG7);MkQ!r03aspCmK
zkB;h8CFDv6N_>`T8oizAgIx7t)t1w!^ZoUk^YzQ*Y3a0)*An+s=G53hukuf8l|fcO
zcThdo4)g1j>@DX950(<yT=Tli#)BF(&K`YZh-}(TZ3>7?3!YbC(XZ!1C=3Le2^H at O
z(#qFOhHSWeEX%N|(~%GLK-ehBqnuuws)@<0I6iSh0r21J=37f>r|OSDI6X1%!z!FY
zvs>4Up&d#1D<RNc%|!Pn=`IoKke?3oRxax#z7NZuyR#sM4lJ6ap`MEpu0v5W*|g!9
zR}79qo#Ep1vejlq;`}<DMq>Hna99d$1YxyLB((i?b at MPx;fEEO<q~x`BdD9AIWVb+
z=+F-(qpC_+u}E^XGPhM{Rj5!Zj`j~8eT{DoTF&Z9^+5lb7`vt*AIhJQDBv)lcf36K
zq at 3qtMI{p6Gw`pg%mv<x6l(wttrp+{nB)!-v?rG{gZFz;U~Pxl?D;FYN7uxzy^W~R
zcVL$<t|~7i3Md7^MY01R*wW~-@~s@(=EtEFqN!76hiF3MK0cvTOaDUJlpD0bm^y-n
z%L{;r&An>KR7f>plYV3|gR}3erwKv3z+lvKk-c{GwEF|kd6ZG=`^pMu5?bI$IpOf(
z*7p8pdC{FBf6?Zi9^G1v8`rOc^K9$*?jd_p>XTlp(4f?YXqhA- at W;Xgcg=iQT=~cc
z^aj=(ON4SFAfadbj4oY1_~s!vO+)8Bc;Cb0yS%3EmJ?Sh;`^0oa0<F(_41u9F#;rf
zZi#v+5m3!>vxCn;-#c?FCpLsZijf_vt$yf`#w=vAPOL590aTKxZ*y$<k$l(PV_RGw
z_zRmJLXB<0jXO=z92m7tEB<EsRHFT$-}^v=r at -7o^U8hr3ci`sDympxN3cJJ3ZC)`
zLt^m}uf~4zFZ4%63 at 7Htp@KzYx9YME77s}VB-^&5fcqE{1u#v+LCX;ZK6*^a9!$05
z-X_lXyIg!5Tc$cXovI&J^X%R&hYe-rcP-G}{f`t8Kzg$du6!_NaS~pdO-kvVM)#sM
zgyM1ddzLnv%NQ9r#hW$DpjoSo4I68IHbqF<&w6v1y0jBfFrlnIiljU<+8&%QaJ$T}
zxA90f`Py8&cFl+1blG;c at bu~kEHV-~k)Ec$ZT_kq&!8+69 at VRTZ-cX@alovG;{jaF
z9nSB&;&pt$D%2d%C*~HUIJ+Uj$4{9&a at lue@CZVDp39&_)tgthuzJ>Op=E!LWCTFU
zP6pP3oQl8lP|M3}79%WXz~Cdg9O3v3{>FeEyk-!?6vvmL-uh9Jn2O^}fKL`ZG&Cdd
zh4zJgAF;Z~m at UclFcCUY5RiwOr>A8f{E{ly=bGaLOVct0c`<aLirdCR!F$UgQ0S{B
z4J#E;<?Q22w5|TqKG at eFYI;Rg+G?a%hqyH;OTPft;nQT>8oO)@Lb-ref=w%+fW63!
z7rKFYzI&oK0W}KT%)LW)>xM{NH15PS^A=a%C54X!^SWN`KOgVnsQ<mQ=1Zkk{<0 at B
zO`SC#s?$Bg?8R$<f68$JmvR3zxiDZ?YAB+;z~$a!x~AW(`95ZUrRe5sC_4n~(%Xn_
z0po>RN2aKN>ZA^Wyj7K2H|n81)hpgr#;YM(r`x70=6m`M^IE-3uC(S2+l{R=)WjFG
zKT0N}Db7i9TcTh~k+Ly8ZnS;(@I5gNdlkyW=FkoWgky_+tDak+%dDm8fBV5Gl(ymA
zxoxvZW_tAp6lYb18f|dhL#b%+!NytQf%3$0T~n(rk53f?0o?<RMRX^RaVPa%f{mTS
z`4x+|#|oRKd9vqxMX{>{UkP(iK~oRUV2n>0$|m_19LLKm0k-<6-c)zbGBl!t(1y0N
zaNJf~m8=@JN3{CO*c(Ifc2rxV>df-3I_~BJt%{j#8H%83?}#pH at vADu!(zqB3>l}h
zAN0%IMRlcmkxM66uaOq0-4TyvIU{pk^n*&@ZH{9dLa4j*`&r|>6Rs{{ba|h0y)U4V
zTC+T(rb~nmF|L2|4YxqsBTU!sj;x7lddoT`LE(8uqXNujui?Z|G*0We{;M1a3SR?E
zb^@zxiF)he`S2EcLb!PK+;snH{^Z)Xx$~;t9eY|YtDE{lwI at 0wb$vP5-E`^4+7fgn
zu^GXg`Czg+0$DWCuT_xfkPRX70^Z%bdzxf}3pkXMf6+#YR;3T!F=Z)USFC))0x(6%
zTt5aIV)ppfI2j{jt1DQe;0k14{=*OyxfxRnW^sm at 2uYWzj}3Y-hwPBb-eOChGI7sO
z3C-W9U?H&0wT#We1t`1~rrTQBHu>nm!Tq=5o&4B#A*f_3m!Qqe#QTwMy44Flz at yIB
zd{Ts%<f*&|<C#1N%9<^QP7R_$7dRO at GWP7;%Wv#jW<uLv*z)yA=<G9ldwcyBD+}$g
zyMFC;UlJ_gdw9xw*Q@?y at Bje;pQ1_Bf}k;rPmT8xN18|j7Y+fEJOwp2hts|n$55P~
z5~?JR at Kbu{9B7t_!4u4fkw${}A!<piivnIJ>Gjw#kmgMp3{=h$(p=ljb}zYVf-SGz
zI7Y}mz1B<x2mJeq8xMx<PWiBJ#Cc#c&x-Ee)I}ZkYBV4QAosog=B<55+XWmt44CPb
zIb+)y5=~}DUZ<m=2(A5?;tR)azkCvZz$nnxp%XcxuP5QQZ7ES_Vdh_~?Af_*Pp*Ex
zZcI&*>6<R!BvgGqo(MBlOk1=4s1lKe`cB%9qI4?;?|~peW?LFM9a)zRz0}h%G>~71
z$Tq-a)N%_vA3!RYzsmRH{&?&;Lg1+845?}lYarF0Bf#URxeJ`#s-kbTcWUG*WN>uF
zS^I52jY_Y_YWcZXg9!9`jD*fx^3a`LcA3D0r&E{=P)coTRT~^|WW-zDI6z1ec4QU5
z|4hdFb*?{NE?CJEjO$DF at ZC~{Q8`2|{1j5<)u_!Cjzcw+{dxITTV=kzd%yHcU!}~r
zE09}vPUkPP0BT^f0N3;N6t!p`m8k!ckZ`5(gjWnGpY-kyFn6!Tj1A*+Gjh14U%<~*
z9nr^vd#Wu)fW`}}AKRX~L-E^}LC^cJKKdP>W5w+RE0Z{jwzFPq^)WGzxaqZ0zcPGs
zs?&>65sgQbmD!1hy=%A|)v7o1<&?=&@LoqP(#jV$;u(%AhItGO8OUs)qc;^91o?^R
zj#j}?=M2UedG$h#0b?RZAM_zPXSyE8GN0Fn6f%kHNWN}j^M?nLWF*;=hRo<RPAcgU
z^r{>piZ1D{e+roVBJ!AhM;ZdyKO_J$dF0tuom$4UbwX$<?gipArf4kFjQfXeuvZNB
z(}-Z+2=$J(1v`K5+?Hl(n4#;r7qZ)i%YVZ}pgAQCaxDP}n)1JVjk%3gEs9)C0dGak
zb2z!}c`D851w5w;XI4{@P8502M8;ygM8xUK%^o`w8M0N_#-a0stUd_Hj!+iTbL{Lu
z?4PAh!Vk+QLU26p*GU-(D^L2Us_c+SIsapqmtDa~j%j4hDW{QcN(({4jN8P+aQ^=I
z>KMz7<w0y_;T0j at fyvhkb|$Gm__SPC`WUsxmbUE%+y3v+Mg#+?Rg&(zt%QtyM5IZ(
z9ok4>tmXhZK{at0N%NX%Tc4j`2{UCc0jH^GA;YhAWj%jB1B*Gd(Q-UL1JD-_3KD6X
z(H%qJfEQ;3W7CvhnyCV)Y7hD{gy^nVzrL-v3Yt)BGxb^&f!>ZH7-?{VETVnbL$$ts
zs%4u at 0#ipl7g)J&MU%McaQ6k!tpqCHHiSpD>&*<AGKnEKt>(trNChsc7+H4M@<w)*
z`R&(O;ITVl8#0*)fSA4qhQPxj*!TUnn+%5g-^)6QtPOJ_>5*uu`((A2IXN1cXJD@`
zv(>-cB^&7lq?CC~+vqx at ghsSW`O537c{($?g)#Iz)W7e^4GsZ5s$7eNlBnkkS%-Qq
z<fKNU*OsI;#3guQxO58l!*bhC0pvZ=Vq0IXP9D{H6F&8gkpTZ_NDO}?jshj}rbj2$
zEB+z?L-38tqUP_G7LHC&-UB%h+1K(nlEnZ7jYhoqUyraRn|dp7Q_bExQ`&zR&v1g>
zYHgf7aDf9QL!i|RFL!PD)^q0UVC<itorKGga at kM53o5^I!+p%4Z2iAhiMSw0&BZ&H
zQZoUMm*x^(f5za{GduZOT|m|kbg47w%iPz_ at H<JB3NWluiyA}^U&qRWAS71mT>-Qz
z3ozK6JJY<y9b}lxH{biEmM?=VNq(FeY?;dY^=?xZ=G$rW2MN3zCpENWhQRLP*}naK
z$D4>FuEiB9(BtU$<_7w3Vh8M=SZiWQWRBuq;Gq0>Hjg|gZwe<L2sqMQPVvj%>?Zcd
z=yKag9Yxg#eq}ZJ*zwtMJ4wt8=O(q>1uM2c268~<TjIm8(9j5^2_k<?%@Q3|&Dx0C
zcQ2pNn5z9YtUi9bE3<6H0&>xxTr#@YDkdf{{Q>xzb`JSC9#3Vy<v#b~F^AK*X{J_g
z>zH5|;;fEK2iZC5V|+tshb7K9QnVvUkSJ_=cGV6b^r__>pmw>#_aEqC9+}H1P+y at L
zY$s+*em1!eqj-MlaQQ3CC%h4vco`n&M8p`-LlV(UL>wON+jDZNd at 33wKF@FiVc!X!
zL+)UKe~Vew?cWX?f{ydl&DF^HMM=icK-ZVo0e!av1u5VyYO?iit)35Hb6>SH8RjO~
z&ya(|N^#)ZoVRbi3quQyVk@`kB_yh1`^Y0lGS at di8>5)!#90=9g91ni7ii9X(4y5t
z-=X}j`UGEHBpOMr0d}3H+%%tpaBF5O-CGM&eWnP9td7pXw*JY at r>QnI?<;mW>AmZB
z6tAY-#!x<0I(}MjS;a&TXw_UTL*p~gPX7)JY?p%(aD#+Xf6Z|A%axmFB}JKrbUDIj
z1loi({b5>@{M#Npcbb~yIsMpKdIT6!C=lCW at tf&rXcJ?T5ScbDC=8y12cP6Y?-+^~
zqq33I2k5S}()ex&4jlGRGRc=leif{X!L!z at DEi8B;1Tp9l`~EZ8?_>w*(Ct_iiO)s
zBEwLYkFDG`xiKtWFg8#VQ}E7#3EbbBMhbnr)hp(&+kkbLaNogPR+NN>Qhz-vxI#`7
z(xN-DREpNa6sovFH3iLd@|~o-I?s$XNgyg#l>`G{KsL1U>c#$Ux~Z&Y*`MfqkeuOE
zaCKIwMRSApV<1N`mbtiUHY>LIS2)db at 6RYK-f|*iYSQlR#)CEeB35NlJ7Y!()s2@}
zt7R7iXem_F6V+o2R=~dM)cK5iQZ5T2pewwmjXA!YL0-z2P?}!n@`7diRcU3Mb|K9H
zn9Saiyk#vap1p*zDLSCU%my-Z7vhr=Vp?tbfDT=X>`SsDx@?G6#cnJG-M2Y8c4x|{
zA%IredIZqxTtU>ye%G%Ahjr8STHtowMYvgqa%ML*FToE`xgvwU1YSw1xG|)CE{Ku3
z*5d?ZlfvsVJGvA at ycyV<-leHPp)y<JG1~D#RfdyPHnt;QrGh4igVS69 at xTWa6<8{l
z)=6St?FNP?$`Ob-YmWrv7$TIw_`)q~F(<gE)nVdcF_UJ8Bs+8wJ_ovq<{I$Y1R;uv
z;R*mNEeOYy)wop)(s|FfT5FVROBcRT?%-1=?|=sKYt5mS+oxw3WFXBBia<6F{`A{9
z3Mh83h-l*U7HCvk`!X_f;7faXEbRG#m&S}&bwd1+bx+%{D(RE^C=uhliX2ggujSAh
z?0R^gnsjLy$m%`c2J%NfZy`h*n(W;Z3qj9v0d|cCgSM|W#z(cdIu(IZ%W<#AnkRBh
zdE4MdEBBI#b~GnDt=YxE&nD}$JyCjy`NuG8<&>Kfq~Uyb%UxNa%5Puxq6G`gZV~ZP
zqh#sEjmF5xsypI6)(+LTXsw7u`a4(KRXS<?_4^m}Y}>Rz2k{IL0zwY=BgN~@X$ZY8
z;J2;;V7v$P=Szrs?~cpJ>;vSkMM3BsCZ#Tg`%)TgaE<}kRCgU}4(*LjtjXP#0J_i`
z99MhkNYlc~qrS;qG-rs%LXIgtz?IhROzZyZzL2qom+uB%8Y~?2{p>NfZ2{J=+xoKK
zy<3Z4u~OB;Kw%eZzM%V%jYUNr9$0Qo?jkcnNEJBv19PGYMi`k$78aMfv_|=$u&KPN
zG_DgCmetuk9}h2Hi;n6(09JZxK=0`eWCFzW4Xaa1)_|EI2XUpB7VSaXH-6R2J3%5s
zB{Y~kLGV+rHTtR!IekW$I@{Zqq9ysdTB at U9*Fr7C%+THN at mY^1^k8c`hWx$*>&G-a
z5+-oj$O6P8f)I}!2UKgszyj|o88gdyK3S^3RaM|KA*%hh44eXH3vT1<WpQfF(O4z)
z{%eG(9XM7t1vkuN$PbOTzWBTm+3Bw69N$@q$oc3rmuWjFR_}3jOp|$wI1 at P91fkHm
zgbr->aSV5$H)W5~AsfB!ANy)hiZ-CR9J^Qd&HK?Y!EJ73etWYMeycZHa~(9$MVkq1
z?9xLt)+n>uM!k%Oo0oTD@@jyjzk}{uqD&V5?xDEY$%scmL4n3hD04heoM(m2+)^Ai
zw(<^ho--QD>+zOi`pvjCGty`rbLPPZ635*u?$0upS5<}LN2hs$GIKPO_;a>a6=D5&
z>`?w3R>Z$&Stnw6VYeS}!h~_ZwJ(FB*IqZPs6 at mxdbEAfufGa{<<?Yehj8kre-d4F
z8syw%ou=^Mfz=;MPHpp+bvETsvJ1FZFQXR+qP=5aERx=AXp2q;_U(Jsfu<z2#}q~v
z%ZhBNC#}S0BpqEv+o0|LY+YP#O3Cu02iafGZmIh9&8`}oX7=JFK#DFnuE)-ViLxF^
zL#c^ZFcuIm7Z=x?vMMm4LPZ0{cr`QZRnl$aH<$JOx at b`;NKz#*E=@gb8i^QVB=q>h
zNf at L=f%I#Z)0VA36CLm(B4Nm&D!)-pBs`ji;GzZ^N)13W?;<E9gec9Hn;nWDF+keD
z(rG_A?vA!VG-!j#4mG)ga{l at AIzS|oB2N^Y@@fHhZrzeY!^I(D2q#M-Sr&RxDGvp&
z<AIX3bK6^y8G>td8V&uSkzw?l3IY$-#*FPjQFSY-Q_ugS)2yfH;eG59KMGJa7%aDQ
zD?W9!Cuy3sTJtT*{+cmdmN|*T!mco69H%2W%E8(2;^8xlduGA{^<=OnKJZ0hZANxP
zfqVf7R!Ye4O9-KdEKa(02Tn!op=jW-s1*MC`)@(G4nf`i#eF?JQ3HsL9m~uj(XoaQ
z?<hG2g$&e4VeOL#*h7Bx3Z^YlMrni%`C=Ts|B8KEd_0ye4<rn)US&)uN5NE<OrLP|
z!{+vunB{VcewwoS>L<qqYQ+>s_sD&Q=5&W^_5sVpM3(6&LXfl#_>Lr$3)DI;Ywa`9
z;RKw7m^p!MmitqYDJl`$kNh(A0&KF|v;ZCMg>;FajPiX*dn^tbSWPW`h7&QAKJozj
zSgES9KIk@}+{Oq;Oyx{RVYUk{9i*4VdXgm{Jey7kB|?28*%(m`@2{qMm>v>`uN#5!
z{cFgU2L&#9{T--Y at x9Prl~xc*yuW at u2Q;@l#`iC at wDb{BNh=NDzP;onRWQi3h at y=^
zAC4)ho^Q<~@oZ@>FL^SNC<*UR2BSGraN0hE)Ge>btCLhn$U10 at 5}23oBegI}?kReR
z7qOb~$!c4V&fOz((Ez6&WKX5Ebm5wr)zHw}T*M>~K5SgT&{q?m=&1rhqzv*Yj#|>)
zQF8)mL>LJU+};@u#&U_H5u!0Qk-w<@qA?g-<c6Z2n}>lPm~-*I>nh9h4XmExo%wL!
zi~uERL^1P0c}Xo>Mhex&(=H0tdzWg{_)nA&3ZdgXAM|^yb6p)v=M5SBsY`>P at zNpN
z<#yB9xOC|gY84`r?YCKWQ>Z=3)lW>rY;;YfDrpl@#+~YlCG`VN&&nk$8Q&NFj^NQ5
z0Mb$#So9W<sh(8M*m4i1vn?n}KO#Gz3GZ#tLy-9cm>^qQibA+<ui$<PfiGn45&)Mz
zYPpFw4V=2l1a6~8sudhq#VF4#zP+6XdmpgENSsOIKrjiXAAO-n91t9fx3iUFXM#Sf
z*#de+F+STIq7k59Qb5Q^{z!hw=(PVplR^m#7KZDuPWm5ZD-sTg#&jNKu)02DTarr*
zO!qX<TA-Afo<6RchGEJhZ9N0(g>=!c1`cRVgvM53cSTaG)j?v>H;=*V?K(Kop+fd0
zVlRO43U*hnaPXT+0SimtXP`#E?=<P2!kJo%Mk{h3o{q0C4+9=4MjGpZ101?m4bYG?
zN#*hW{rersk_5;do2vIm+olb60G~*Ig2bE$^XYJ3JZGN$V=#?G{t(W=r0OTS++l8I
zYqacik#Eon!WB`GQ_jAKAxxS=iG;zdnTu&QR7!LdkS`LYV=WphoRJtLF_^R8-(Z0!
zU1 at iR3DB?sZjv9$4g^njNK5GJya;K~4BOBl7Ub&!Gk6t^Ji*r$Hr6*<Ai*FL9cddR
z;%OCYNSy(xEDr4%jB?Tw!K>n%{3Lvi-dw-P`ksUgQS|S1ob=sy3Q^C3)!IiK(ms5I
z^?lB5b6*lMJ<0^YEw;EcW}TNIx}VbQ!>9aRAkU)xON5e2eeQ8`;{fm@?&tsx(g2#z
zqRUB+f-ezv>0HQF(-B7K6;ju$`U&eh&W0|yX-?GzIDmliles#9?(|i at f%QvdlWc%P
z$QJX)Iu?=Am%;eXVBOO(Sfrw78G_bxBpMndTEEg<cp0Jy`r^DnO!~RUK}7frAsO6I
zSpQtNwG^z!>97C2elo1j{7-}qOTK-$g9&X<00HV+?!d3jH9`FmFFGrcl0pLhNttmL
zJo#J{F)RxC?D8zYiBJ+SHsl0dwFAveK$K(xoC=VlR<hG$b~faHbJY%841HlQ#g`0;
ztgqmvBOWNCWl65bohFPdQ{r@`9!_dO^SaJh at cc_OW@#HD0-Bw%lgvg3Y5?R49vHN_
zlkT3ns%T8ihwG`x{#n!^F2^4eK6Vc+s_Nev5|3>fA1eK{1LB#Q8W!DsZAsRwd#>A$
zv^<-&;P_Ix6|>|{%;ov<+s(+Ro6q(>{B70Mkhv#vR-O&#`K&#3<Jp-It)L+eHm)!I
zV`Ewy|3`ao9hLREeUH8d>b3)8D`kTq1|l7bu at MkZLM1IgQba;Ruy7lIl1iF at qydrw
zZWTljRN|FJQtAci=FSCp&KY;y-*24n7{77<xZ^U$Ios_9-cLNwde)k2&bd0+8V_z4
zN)oa)m^1^*Ew`%r^IW at BS9XvUd4ZAt6J^~MmbhWZ4H%1w4qyRL26BHVxXot&<yEjd
zibpUeG0du+rgzpsHAVM>R7DftZFX=LLstLfR}wohTyhL@?>$7>7LH at b9<E at m?$bo*
zo)N-HpGf=*{Eu(#S~=9wYN#U%QEHQ&80#LCSpu^s6d!(wwB#+~N$Cf<E;a1==z)XP
z7%2gHZ&4Q?ztsdDUDRELXO<K>ryM<c)Fx{>gXe+D#EMKjm3wa+nb80n3r!zsv#`m!
zw3m1mAcr;KFeJ+WyiZbFN)5HXiZ~V at 0nMC)btNP>cO)jR#YHkm%0Xl8zT0=!IiW>1
z{^AxzX at n~NIgd;72<Dp=f{aAdl7THNlR+wC^Aq?8V7l5#x|obu)rpI#qmz(qx=73m
zV7ZKQrY^-{JVFKVlZwz|v_`_g4^|N9g_>AEMQ|kt$+3bSP5=7I%h4tWJ6LR}fMG?d
z<&@ft{YUgM2et3_=a7}k0cB-PblAxX#Fpc`3!4VS{qxwyl|(Lwu{Y?`mckheQN4t7
z=FXFs)DiXeza5tsRTt7|Bg{^E1L7$3POl{94^N*HHI<?7etBF~lTnC`MvALQq-dl%
ztgwWY8?M2nW%3$CKf=5Z0dk!@EfP at QOb<?X&YT(v`^yEBS8;`Mq(S@=bs+P2201Lz
zSv&&IXES&|@=j=aVyqA(A*<TsNybePsLXe6+|6?Wmnyq!&%~vk4T1|q6OLg at 1*v4S
z<(MwI><Al!eI5IRgh~@~8_Fp?pMZ+9NkAaCVb82(;~z8Y_s6UhKOc^5O3fK$d*5&!
zyXhNd8BG2P&nGCU&LE+{?18U1658CaOyx;n(?HAhC~kV;*~wpon;q;qyl<Z?rOoJf
z;lZ-~T{1Ni9T)?;=!}Qe<3gk_2(RRwJ?RHzleKHg2Rs at V*~#bs0IMf^>)f8!lEdS!
zBlBmE-_rC=6DvR^!wC}0LDb9aa0!6z<af at Qi8tvDUviyzKkWLjLx%OzgLTgcF$1Ic
z^9_d8_&rUZxTgn<0AM}93l`8xjk-KeV*Z_t^x*o1CO<`%ta)$(-CajI^>G`D8w}=)
zj7^LT?uobTGL`&ONQFpSigIF>sLS|TtX7_QB(hV`2j at eTcEEE725??;?fkXyk{ey>
zsLLWOSxh~WCEpUXLuhz3F^uplp3+j%U;g`UVMVO~2v`-^4m=gl*m7i;&^J_ at Ox}tM
zO_xE4>cJp`aG)qQSyNKo=`+%HPb`wzcL>L?a_n*gH24Hjzm#)k2Or(6-KvSj$SVt~
z?%H=-yFs)Jhmsb*!t^bzR*T73#`YcnTr?nU(qm&a#7oStUOs-AliN~-aS8^xfI2+a
zkueXDiUhGm)q3OK!Zvv)3`Ni{(Dq_(PAGo_@;P0G7QK~^3nso}VI4v4BvbSxUlD}a
z(!g0A&h#xE(<iQU);UBXvc*52#c4~u0$l3U*|a&!cTL>wWs+yYVsW!Pc|Yxz8(1;R
zZhUoIIR0e(u;0~+^QahTT at mCnG(QKw;__7b6 at im?yUQ545_uoOahTXcSje-)=_>m9
zCogooOgfD_hA6B^$F}0MEeDSgt&Qs0lizWbB0X|PQmzq&uENq~>Lq$B6K{>@<HV!{
zc~7bZ!DlRK*dzP)9iF+$*2&eyBZT6Lv~ytI*+Z{_lZ4%fu7YjO<g-|V;Vt$p(FyCC
zj4c<qjL^fLJ!A6o_rMP+9K$<XP=gf#`7pBOU^vq|U06Q3Ht&${DM82b-^l9#vWb8t
zQ_i~L8hJ#2U&1zW+yX9+cai|M0WKk9FI~dhD-%0yx(kNYYlp}{0|2+?weo{V<3VY!
zxdj>Nd-|~ci4SuL5t=Ip5Ul{A%IEIg<AeTWxkQ9Y<hEozIVifC!9QYssR)naK3#(B
z)fKMCzaupm{*0=g<mP1NE{&LKPs7rX%8+4NlL?(Rz~t<NHo)bX#~r;}(D)8`l6o5m
zr!1Ntbw!PE{fI$OB4I2XXt0dq_%|`Oe9X-)1i_PbCaLB<+5i0W86eP}_9{Knyo#-!
zc$?LG&>@dQ_st`Ld#ip%(cT>F+s<0J>3VSCL~JP~Q6erO9AqQ#NPK(+jy}RRB!h{a
zPp4PUAv0CnHqjR`QUvf5g6tvC0>8<T2v(B8+i~yE3`XEj2nnOhkWy;@f~Y_|j@~?#
z5CB-iP$pxz*#R1BH?N7&zZi?v#rZL!=|SKxyl6Q-HX{NF*g{7G;daNaX290R4?^Y>
zd>UChq0p69WXm{6uWs}PUY)3Fs+}d(pj>7-6>Z4r4<s!uU(bj12f&gVjARj_!=Q>8
z;Qf=4LhHJp!qJ^M%Cj562ZmW-_iiXzRaEG7e#)dsNk=vW5j$Wg7wW^9eFsQf1lsJS
zpfok0x<V<Zg?9EzX~#sA(orb35*-CC8&LVvlG%J<F5 at j-S6vO#NEP_aX_WyomQ5%>
zcguDv%)+KNBAcMzfmRvDCAXkBEaJ2+e~A5M&-W+8nLIAhB{0JIgJ<A_|2 at TE8VETE
zmp+6g7VkK4&SQ`Zpcz?E0HxOoT*<gR6Z`1nUVIvUpuTvg;zm6EC~xNZ?HA0 at s?%nj
zpE;YCfBBI&7(R{N#5=yadk`YAjw~`~y139G+*y5aiWFQ4k^S_Ypl9->F08r|qHp?i
zwA+?#n7Ys?>WIEIN<pSmnE_m=XcP*@?Y`mUW=uWs_uG)QQ+PDtrB3=*)SX_9Cfq>C
zkwWIq#0U)8U8u_z5Y!QE1{AIvS`9K_)jhz*bBF3%Dxgq|oQDEi{t%T(AYrzkodywS
zeT;(>EJ)4MM{IC)`43}BSB1g{bAkKhZ5SQ4<tS$^z^hUPmAQ`n=7MZ2?8qdC>kcS`
zz{fuDg45+NOYk}J3hjauDeK6Zf+)KX{l?ZzbJ44v4 at ulxY_~#m8 at 2TggCk4qK#@wj
z#~vu;TrNL=uz`wFg;+NLCSWoZBI0fdo4U}H=0?MQ!vq(+eXbk<Hqfq-RTdf`#(0ZK
z=4c at ureUCaZ?gYVJ;CTuM%>I`6B83l#=s+MFayJ4sU3knVdFbw-aOywqfxV2H^mdA
zf#s(LHyQe{T(WDT&LSE3kaH>GQ)f*$DUwims>4BQOW1VA*az?JjOxqSFc9X~4XzCJ
zLeZ#UWi5Um&Q0pjus{7ipQnnI+I5g#Eb>)S=4g*T4q1mB{s4O7Rs&jMjD@!m?_6%3
z;}2iXuW>t;CSB!_;Qc}x;WV^1>1}YYo2sG$>nc at nkVq3$UTTguDXFI^UD&dI8e?o9
zmX<a-Wl4<iltH8fx5EL^MJViSn1aWQLO~^>Uq<ZP$9ovFJ%Jkig=b at KkpSih`3f at m
z#HR2Zp)fA8Zo>xu*FrQsuEVvQbrweR(J+hpbh(X at T7y9tWWSPC)(-rFh<>n{5>RAg
zjCx=*Ccce&t_%D~7({1RsLgr4iv_$JAqQhT^)T>aa78YcPoTs&prDYW$qh1$3fjN%
z4t?gg4oz_xqX1<NnU+5bm{m(Dh>PLmgtiz<Lmwvfe8^1on9DHtflT$lxOsuYT6AWH
z1SJ6|P>z0MB3B^~AHU)!_>qiR^BCpb%#`vF`)0lXPt;oaz08`zc_QTx09%ox*v|EM
zt^_>*ZjO&iCz%!XJ#n?0Tb3|}mnNM0=NXFOx}lbnvRla`3FkYF<N>*96BOCwCG)as
zTbQUlL#FhdbJ{X79Bg1$wz^MYA9o^+9kqovL3;4#TAUCbmNTaw0^kRGzvH%Z<+Tg6
zf1wdWhz>rV7 at en9>`NO`1V}`*fAl~iK}uQnWIEn`jP_B$+pi>Cb9T?=&-0&k00O8l
zKq%YXr!Z!z;Miv3&EQ{dr9u=*c}&GNIK$z at J4ZT#if!xU(a-xzAOwEk>{mkCQAVbm
zOuQ{oem6|ZJZUeGf151EFvO8J(cH=YHRYbDL$83X8`}%iE)kf#f&V)DDxx+&<{$y?
zRKbm)2=+K-U;x;|$tG*-2jR~WFJHd&4ho8HZEcMl3-a-?u5fOws|yFq7YOKU2|<R8
z4R|NSOk=Gue_ZV at NwW8Gr^9WG^mFKYkRMX%^W#@4R2k`A*atWZb#1a-{8BqV at zZ>0
z+#>rdY at Pxfd3oL1vy5nC;rOZ8rbx0)%HiqG4@%;wI+o^`RI#m`c7~)1jxTaFV!=a#
z=PzUiKT)z3yNOg9*|H;uC9W<+9lbETrna`t9shn=&B%!N13)hq#$@4yzhumrtdjA^
zjHwf88U6Kh#zcBWe- at CPNGj>i|GRI$Ky43%XGwb$?j at Yu&lM3BI4))_S+b<foo)J#
zm~GELq2yI^RtB_SV7p^FUnZMu^+}G)`kCK9O8=Li&Ev9l0k=zfO)7(3n_~<mF*nZS
z&O$g}!9SwqB#Jz$x2N;O;E81j-j-w7P5X~KS!h7j at 6->}NwS>|8_td6c%Bd)0ux^@
zY!k^E{hR)ji9C}2e8goU*`q%%)Bmd09|RpU$zlfaM&r%Oc2Y$S5R+<dkU-P{4S+wW
zgm9vUg9UQf#&`j85XClsfWIU-oh%Y@);$KD2psEYXiy<fz6{qe3fg2Ng>$>}7?&*t
zbrdg8Y4912o+iNLh&3c1B0d{X<VZ9Ni6aLYVXOO`Rs99OW-vwtzhtr5lt8ylkT$?%
z6EOeAT`mw<P}Y;>3DmxngVDpoM;#EUIPb+20;Tc at 8unjtq;<pYv<07ri6W}FQ;=@i
z=&}G=9>#Kg6Z|1$s~{tl9|;qYzbMy7I|HYL4%r%kxrE4~jx~ym=m7X$Z|pgr!Rao)
zv&1Q_K|CNq*4ZOmbvPeYk}!r-kOCI5hnU>hZ&cI*Ln9EK4qIU3j=ncu-2E^&;|5Z}
zRi3xOARIX5Oma$H$6tHVu(zJO>;tyJxG%szU^H-(9O1?BcQbO%JqZh21u4XKQp7(-
zC1QU1?x}LiEY3_CFm=k%P|LSz+<<^(1z?H!Mi3GiyC2t<-$tDF+m0hFcLlHkONfI#
zUIG33C$1f|gvP!s8=S9mu8)+TeK(J!kpgA=fweT{zXHWRr}y|q3HJox;46`J&Ub=Z
zw;&OO&$NrdkVKI;!+a+IA|L)zQnG&Lfo at K2Tdj`gSM;wOPp21Cqxe&GHnoa<>qp7a
zex)aoBpl4RJKmrKt+;b)E~j{5<4|wCa6 at b>*YfGj7qH~!WCA931IC}?vl`hjrP41@
zC?xbHL2q0josK3?WGp%X+eq+lFE!Y*7Nd}Ug3Wz5FwnGQs3vyBa?umo`T)9mS9snA
zJbA&4n?>l|T=`5Gt2(|+ho1f<sLJHLRX%9 at 2l}v>_G6xl&f&-G>|Y0VO5`z_FNefi
zW=mwPcKuP+epiOc+qxBI!v!IY=oF<4`lCC%ik6u|yBrqYZJZwtfg4w3?pq+$eP?y{
z5%@vp_ntwieD;$jTOU?wEm}d_v8*Mzcq-{R!{4yedWt-n^+Y-G-mF#ZxyyuzB{(g#
z`VS`AY$In(RT%YqY*z;5xYjg{<EkTQa-l;njWZk(jL8t-;TU=&THn%xTBR#T2lAc$
zdk2s(It&XD)rJ?k7r79e9GN&Wby(LI6c<0N<_esB>}`c!Cfg-D-F}b-;fp`gvuN?+
z6Xzi at jFt&)?0MJ;n(hu1Vs$pYv_$cseN#n7T`ezJ-JTP5_{$s?ii#b?c5Zim464RT
zETV)R0XmH)?>a(SqWD`kCC>cEp)Ox|wnUxA+5Eh`o#SG2hlP+^&V{ScW68H$cg`-n
zEMb-SPJ?Pju>HCl0xX&V<a70T;e0}!r1!@kf57p+Gu#6yWHW$>Z?u;3ETgggno#8y
z;Tlclonww5ZK4^ysA|6%4#ml#T}1PyulLgI4%g##DPvfBd{R;s4 at opRz$!a9dN%b9
zh|2aTO*l%!lmf^}I4S7E*0}_klKTCf75MC5fdbUqgfMv6vJx|xn58j}r4Zu at Y{j%e
zWVyh53(<ua$bJoPS#ltz5oBd$=2dAl_frL#`ud~8Y_(G}hNyA_f#VENhyfN&)U&U<
zyI<h1dhSM(m{%9(xb}rVDCE`tiXuZPNW7 at 64WEW;i3ehhvTu^N-BNE|mM|skP^$O)
zN$TI6cDjgj*&e{UK+BeNin}<4&<E1dtzu&P((K%V-ImWWiL9Us0}ZeD;?_w7F~Azr
z8yobK(}HUVnrD9PX>B#iS!F~%LsDGy at D11|RN!ej5yVCP9;0?_Jqk++uco+&44l)h
zHbGiSzF(M*A)4}7^dp86AXXr!l4PAkvPkA7*PgY0NMv-Rf%F-Pw}l8AFY(EGc)&48
z at 2z7{{A}Ub4gxTEC((c=H~#;HslY$qKMwIGzT1iCTSU~LL2VGY$YyWcK?j#KA$$o1
zAEp_RToe7_Ai*!&!Onz;?Y-x13jeqaO5~hCFr=G9ZuT at cSCML}{q7uJv9@~9VU*Aj
ztpStC9=<aI*<Jx;nSg&~#-nBCWDiyd6h7jFN09XbQY|RT(djgJhG#J)WuZKXUF<8H
z?Pdo^JK3iVj-X{4kFb2b7cDz+{VM+KboT at pGEyTPn~oVDg3l%f;sx2)_%`4WRSz*K
zCBh$GY+Cmj8A~ti5bTJjiJZhL8+63ERD{})(9lveX6U^lOwl2R{Z@$5x(B5-KTK~r
zO at UxgQ#5vT3_-Hx$^z*xSOL%sMRj+dhZuMd at ohoK3hEU)^>Lv`x_pxbl7mW6m$!!5
zZm6;;GaEO3=>IX3zL~b5fk7zJ%4cMEjq~Ljc+{;v*KUjqIDWR?X>qBWYiZodz2+cj
zo~sz!g1N_3b>krB2Tub}su*2%VZ%HQ;w+w#A!`5nDm#7Cx at oTu8cj=Y_$*eAZPsvJ
zFdQz8g`%+e3wF|m=)ewaPNgAU{5lAoYBY!diD*rfAJVq{0+hZA4G{C5Z4hvUS?T8?
zI7g at DiUx4E0r0cArwo6T(}F!0K<$Z?ad?pX<KhRfW^10OlbH{;T32E|zZLsf4 at To^
z%<&rXmEp2L6C6c^NLxFKp8dgPp`oGvg01Xuwi||(fVrWiI&uNd-ZS;u(J^OF|5%l>
z?YhI+O-5D-XNlFbQ}XAKfki=!B1(pBFtw~jxhdE~mi@#I+=u?f>Ld}rgjan(O82){
zzUdl%a~~j8(a2C&Qt at F#&Uc9!!fclF`!ICpF)HcMv7I2G#b`0Th}cccCL|edtIQKu
z>m?1>JDRPyWE~W5GQUsO&SN-f-|?A-R*8B;G`G(Z at U-?2>JfKUFi;BGfNiv%3)Ww;
zimjQ0#a{lyJ7G2}OgUsHOgIC%ezIcHMwv?ne6nz)R<IhWH;gePEyXs@)B`J!1kWa0
zGu`#a at ClnX{TK`t<ysn;4*!pnm_fj0`0C`s?SS?RoUl4d9*-iQxxM}LC(&-?{ZhBQ
zhTPM+EHr^x-Rtdx9a>|u4(v*rh%?;9dp)vWzis7g*4t+fmX=RDu6_1eP~$Z$&stwC
z^KBJmTtu at YJO)7*zecB=!W<SEJLfoIE?!og$FM*{(}EStkKD4nWHS52TPJ{xp<{xG
z4?T(bVE?Q{g&dw$HdHWBx^-%cxQXUlsfCqmonutLua3P;?ya{082Js7LHL=w637mS
zlc(S`{oVJ!FH2l@#}k4CeXG=87;{_BRkzBOlBZP!&&fH1$j#Mbcn#*4qIG;&r)gV0
z<_Q{Tav`tWPNagb%0IXyW~>HQ8_L#6<j%*V_}){4LW*#Ms;Nt>ZO<x01K at U<dCKR9
z>EN}5*?uRyr`xdk+tXWRL$=GgqjconN{KFwyPV>aDlC}zPhQtQ#P>{YN1k>PAi_X1
zIV_X$lJ-R>bM8%;bJNs0QyZK#5dBt?n*3*@y9BGFZvU at USXduuVZEr9hAV%8vme5b
z!)fQ3j<BxyqEx4#dEJ(OA7{^9d5!ZNe<ITM at 1kgMXpPWlzfdP&`(K{6T{&*b9?oXl
zaQ3?L=~JhS&>5QF22*@;tYrtdViSTakE%P)(msp>p-jhHC><zL>lYhXXpKMurCZiW
zbvtsRne~o_d2qA3pC{Fa_(&dx=6!vD)y3k_h>irpAN(Ftd=3jxd5S<(LErgdODT!B
z5wOK_XZE3TYz7`^{WA<lCXs;3hGsJKo}bjN<|pCS83#bd<m_7?*^azE0_y*P=GvR!
zp`-{`oyDpmI_mXagk4?<i84>cv`idDL9mtZf2|p*@i|L=RQW+*tkj}h=Fv!%$Iq+C
z&J-&;G5#|WGR3Sds7_9&b#2|*DL9+e at eELPGpdI9ZAkG5jgw;aVeqUf0uN^?6YgA=
zAp>7Au(qHVZ9xaK5SaFS!3JxKhi5uWRFq_Rl2h!O at l@g=e!1QYFd7t@!dge0+1}9q
zV%h)zOt~RsM?20|XGD&T;gBMtI9A#DiWcY$P at +hZ&&T7DX)XyR+XOqVVd;~)<E#;!
zgx;`*&FH)V&91bq4JR7c_16^t;ZAw;h;$a+Hx9r8o0MhC=X!U=hh6RwH(77Y-V6LR
zpsWn+TY2IP%MAfOC6he+z-uq=qUm~Fna<R>k^6?h*|t^Ch1wV)yy>J3^;|8vK3|^Z
z7%_XBva=;t5bQxnnNf(CRjAgqQiSc at 06ynK9dDbjDJ{YF?H7t<k%AP#eYaOU1ehm3
zsJE*cyUf<^Gt}s0b?wnNk5OrW6l*y!EaOr#5D_nbXc{)*BKWPX4QZxvX|TV)f7M^F
z^|cxO?yqD{kjtU;!A_Y==hAxBp6eP$?{WJ_7u)t=*3t_kFg!Da(@-++-9%CmhH9?<
ziw*iJfN}(@oC2JrERcf at u$W6=(h<5b7P$C@)6PH{w~j;_?mDi)E&~o!6K6}_aEsp9
zIU};*BRBXEqt~<JYRxb-4>RU7t<B&qinM^-u_1h_d9H*PzL}4mfi%e;YZbMluo+Oe
z#~xmFEDTETHcCM#DCot>+_=%*499Vr6<S{RUXvYH_Xci at Isf^J072c&Dg){7OPmv4
z7gt|4?&Y7>`7W1hq1hu{y_^Fwe1WDaQ^BaZx;n?63&;=0Qy&=Hfl?ZZND03(ntED*
z)>uVwSTjzmflsxH at HN}tWj^B;=xpc=`oQP)n{^wZ&X|&Sx3L!$zR*a^S)M8=$+OCQ
zVqL1B^=ESOlRh~pBp!>FXlPyW%JAfUaC?s9Y5c%^Gh*I>$7cFhZ8 at 5OHD7H2^KLUs
z$Ea)RZ{M$2PN~*{xG5GhzhaOzYctc}q$CCT)gU at Wo$4-Dn%I&_c at 3LYDj#3gecaEl
z+-~mogyLtMl+58z*o at NHjQ8Px#k+B1)<Y+-Bs9}A4OV0p_41FkwK at mI>+nNy3AKy4
zvywUT9@<xA?4U4K(-JK<1lZ`!H;V_e7A&9<-I3_+XfsE#Pn)m^F9<50czwhete7Uv
z`_uOFa9S|&dR=Lj9=2iKU^4O%*#BPG^=s)7#^{zWnQUoy?%#igL{vPE2~WbuvAhoB
z_9vx+I|_$$GA<=<U4fiG0aSM~WCCyQ<BueCsKRlwQiqGQ{b<jr(0^bao1OH>)h=OX
zNh({ZgW4ApcIWyiBi2oLlVea<=J7#p!&^crm$56iJ)P at F&6UtLbixUj!Tdf<zl)Iu
z{_TUyK}vz{C7*- at 9FIzXaU>0Ho%^ndXY3}<i{!v<SO_SE;pf}ajYxcSv}cn=&{brP
zjXoEr-6*MfhBOPt*!yD2Fbds2reg#yyWxNoeGR&w%8FJ7HbJQu>^wT4ttW(W>J<<l
z4^%E^)NN47VoN&<MQnk|Ze8cP*K+8*R4g*3!1D&Ub3?Lz9sWTbBoI>eQLRj^BH-p{
zFr<f0=64mpf;$^0?!Vb#k6Vp>Ug!x+bp&xat&10zuUK_~o6WZWwvOI5d1YnWCTr49
zf;Wd2;F1Cfm#90;>x-2uVEw1tByy)5Ni9u{=P3Qm(oHYMVkb!YdarEo!F`=$wVSsf
z at v|L_PXYfBT%Wg|BMcXzOOk>eY=+D~ojJTZd~7n=TsYUPT}yqvu&ym*MHCj1)R at 3I
z- at Y?@qdII-s7mk`w>D05U+*lXXBG5Wizj`*&Dh0(fZ=6{pI_%IzYUrQq4`IIt9xA$
z9-7eK$z^gJvFYq?k$syP^;a4=>0!5~%QxI25KOFkx!teE+Rsa=jgB)+DMTy9X0z4%
zDIF2A+{^nfzuG$%__^&5hi!t4R?7k<kuyM<SHj-AtSVS|t{k~OBts#D)<IJiw{th|
z6`A1iee|VjtuZ?@r`_8S6ISM%X%7v97|^dskno~FQegGKD^ko!8n*nvqrPE@#{udg
z132s<&GZ8%y&d(Ab|U3xujKdE=cAf36z}_ib5Kby1VeCeD2m6)fF(R-Y`LDZbY&-b
zQ=?tS3uQ(308ZZN!y*eA{RtCy&@z{Mba)B2gfxN#O at 6Qj#7t$KF{!6)$5<t=_9JBx
z37RdmWz_E9aGG|0iEyqustX$<e#*iIuiCya+T at s7qW5JZjGp12`Znv#Xg(mN9jM3)
z8qt&x#9?)ik~l4=hPpalA)$hsc4y^q*D!y61Y(U2QyQ%=H_Sc!VR8iHFw;4g-AMZ3
zx~jX}D*u8+1aqL}SHn%BRbeEUMNBMth{D?PiJz{0_WoxKcJ|wIv};=<zdn2RO#0wd
zO#p_i%Q3}*26)n}SHcMJSV<KQZ~a%qtA?~#m^lz9BqT)BYY0R|J#2j;ebk2TQ>5~7
zwH4;_<s>v}O&@iWDE}dZGg8<r!FbyW<;_Q)XLOsqCUXOHbjs82$dhLxv*CywD_43)
zFe*!&VOB;W0SC#yc-M=JTS&z({0Y4WnfG0{d6iy?14#>&WA|PG2HULKsZ5w2WOkS7
z=Phfz`UdCE==vQy)NIQwuM;B~;0gf~)RLw4E)WaRHxi;!QaXSRY)th2eZgK;d*2^E
zbcmz$-o~nQBn$b-BeJ`9TfEkPx at EI&>i37Rr8z{;R;e-j+y^vrx>oU5_vf$+;O^DY
z72_-&6OYb?2cly7qvZm6^1aO3%>=Znqe;P8iV9qp29D0RZ9H}AR5<aZxl$P&&S|Nc
zTLsT50TiGX*_TnQ_PQaHg6CXVS7Sswrpybye}Z`<(Q68g)q?45%we}-pY)*EX}`o<
zTJn=G^>eMZ1*yB&t_*;8GlKv8Hdf4>DOHcE=ZEltatce~nlGcsTFdS<jG?T2_pl8@
z_Z+599$3El%FsQVE?OwDtZ6&Hf9$dN=Hy%DfKD1Z`~fhMou=;R2L4g|R535q;b_f@
zEB>+q&BGXV6!oSuJ-FMSR{+c^1PcyB1tY^>clpVfPf4rGF;V1kpVKP71^m{mhnvyA
z0mJI`>UrnhCGyy96P$IBh!%ujd_U=NUpgJ?v4p{{ur6yJT|=jlqaq8d*4E{<Ru!t}
z-RuEO+ncCtM`6>uL^A{lgnrBA%>eM`o1uL9q!|J&RxY#m67Pl$nQ;}Zk;;|DnCq|<
z`u>L_pLAGA-l%=}t_%KY+A5n_H6B?3_kmqXjdT|f;Qr1E#HFt|;ny at dk4fiCcHMqw
zvTTcP6p`G^wvD*Hnj&NCz2+V~C71kNJ2fS54o<nPW;7gGvu{rRR@}<%IhQrjjg}ti
zK3pIZ0V-5ZblPx}Bj?}Dqk7K8^WOK(O40(NmsJLn!P2-9N}T?6KNas#b0Pdj%sVqG
z@<2q(ag9u*R0#ar&Zl+gH at 3DY4h$&7gb^nS1Xqc;d=Myc8V>fBS#UN8%=_aHRUl+e
zOTTU$ZnLv$KqxPQ9k$-}Uce5t(3tTscGyMO?mH8J at kjJ$+|65-1$?&Ga&d;OqqW-~
zg_f6e8rcl1W(UBnO;9hbwaDq66K-fp?d5740J8xxZ>w2_@}uX{<`=d^ZINl2(d=-w
z9LX at Vwrcq+KG!E>n;*;>+xwPNdR&f~J|E5m-+WU{Q1&a$d<H|)-o$+D!xmIU12>l5
zVI|hiFX%;krxHa=mg%oT4DULF$|JNOo9yYjBa1aw!HN`JszB+e;j?uXcvp~mnt+u#
zzYTAj{5d&GZ-K)P%>(cD?VZWJt*xeT1zq-c(jP$;$6o<U=iWHQF-wzqPnL7}cWd25
zq;P7mox0vj*0fd<xdX<g8HqfiSc4Z0m<tWZSb6<91L7*NuhNF2R)x3UP4BF4Y)?gp
z_H&yV4uDhQ*VI5$P(!uAf8wnI0KG5(-iqyOFd-+LggaUdS^{txkt;)oR`S?e2jq at y
zz0(YEQ%cKg at 8hX%Ufzd at d+(z4APk;%yfNAIon`Jf++~+ij5yz2cvxAC!vrLeVranv
z1!tXy6JIl|^uy$a at Z6M!=Iq3Ar<s1xIU2mxPrkxS7<wJ`!W$N%dlbB!9Ipy`k^32;
zWEp6d0Ca^OwPo61#@KP~g at G%UPfq}%6`<Rg%d*eEl^*z?QNx0aVw-Bhk}e=XdEdX^
z^ko#+!necQGe)LXZ>BUe!9s5--=X&pM^Hy;AntZaZB>LF3=OgY80)8Nu`{HCKr%>!
z5_(gR0w5y_m0e&;S8)9`s?%ngMPL8Uy+ntFo~nk8O|P{X*@Z%Z>9{l}3`;g;4JIn%
za7B;^;|Lx?60X#qkyH$%E(-a+cw8(7b>lEU$FINxCwE&T2^2Aq+cb3y&6_?)Pv_)R
zYi)hzg at -8R5avAP9Dq;LU_g&X0rJA8nTjI-!3Ny^HksI`!^*(0gu$9Fs5+y0+R(5C
z-Po;8 at NQvQrN}so>CJ4mF7^wtp4KC^n}tmI35Ez2OijLzw_^;ZRA at e|;Xiyb>X?em
zJqd-z8AyIY^KqO}AF&V^Z=FU+Q&ZD1i0A11L3kTy0b%Frloppb+R#)`Y2+A^2_kdl
z^c;U(g9<$y+{$DhiSL-A^Db@#caFvChH-Mc!8{mholiMPVz+e;{!wRgP|~@<BCBjE
z3Ud*i;q|bWLc<_c!HE`Yx7<7Ez{3!-lYBOQkp!w9+6G{vh-~tq)B1 at 5`wNPuE2DYR
z>>O#ynbVsSGh(`SBauK^pg*XMejvI<G04{f^7fPTK#1x?dW0}4&UhKv&z;Hk_J-x9
zF)=_bFvWR7Kn1Ey8WO6tHy^5<aO44 at CX2}N7z at GNu+y*0`T at fEz)=wug!49_L5Hw8
zFbud!TTcWi07c-?bY(O}=qyQC^UtOk)qB7)o+qD)vs9p60)>$g-1SyxH`Rh%yc1CE
z3G~<(Wa7ZNjgLlT|8pN2lGsM`PojRx1is{kQ?#5H))nu1aX4G^DS+y$`t-okFflx9
zBYIF+zt=6{*uQq|+IOPpjQqmcxC-rFAv7D>o-1MQ^li`#ulHh<a9xWNmR8W2Osv}a
zNIm{|*oH8jndMwy_W3q8LE{`eqys%|{gAZ*-d~b|7zFtBL)~Guq&9`PHuO)dOHxuN
z_q+nikv9v<-k*`ELddOByP3RJyZUX5EA}H%s2CgwOoGYvq9sebVg<0DU#+`!|9{n7
zd_6ZUF?0I2#Oh-<A<H3-kJla&#QYGVVbvmE6DEt>Kq-gfzm%0lz&AXB(RJDPwx7QF
z3tMaz0t(Zt4;e{H;Bgd|p+lp1x{`zU>0~VpDXJCJ^O(0{d7ZoEr5>E~C;!?`RaLxG
zV#_Bnc%vTIZAwSfp5JbXcB~tcsulF`KwTPJLDFj21)70o`zIN`_OdEWsJpk1#N&`l
zijE{uqTc26nKiyN=DoAUW^0n_>|1#)HueQIfh&~HpYOIFgD1r|>L%Vs_PdhGbcnxi
zW7)65YZpel=*JEV6lP>7;@363`TNgf|L#ySdw<L$z*uAs%k@|KrQ^U&JB7FAw*APH
zC0lLZwm!7wc0!Rlr|v`U*12oZPA0gXIdgT)AW9>v3PW_2Hdh&%xAH<{J;q at Hv`=V6
zb_ExgxhVw2k3-C8*Wbq at lg1KSo8LC=*OmC=D>9LKb@^PoEKyz$_B_R=)7l-Hh|yrt
zDa}zFa8fzjm-pReqTjgxZAJ2a^yzg5rSjZl5SDwyTXK-hb#e_jxc#FydtA%Ae#{rS
zr4_&O19!KWrNA;ny)T);sx*pRhPO22p(*zUlOF=wFOob07E$Drcv<aIQ)qzsH|$Po
z8KyiQSE2^Ba9n3Q%@T4Jt^8I{K;EHGpF9zj>;pfYJp8zNhG1Uy6P|$9Mq at xed+>zp
z3k`X2*j_LA5bL5}A8Dfa0O_3MmaDF=%@m{nZkm<Ilp~w#M`*nW{FDj$8uzv9*Bc|b
zokjm6l3q^2med|c&$v;rp9)-Bx at d#SZ!Ul=4pa>+NPijUG-3k-Pf{2Z!2TswC0SNS
zx6uSyQn_%&b~^&_qNZQO;V}38Wi!2SuKt8bO%-jj3e|P at w*+sJ2lcZVrM*YN_bgUz
z8<8*(OE^klhVl%Dl|$fa=r(CM9l at Q!lxq;C;xW`~OO77k2(m9<ZfMJ%VK|u_0pADR
zj%qM~TnSHBU?@vCscrAfHNfdgF_GkM5b%d6I>$==SkTxa`zCL&^OgC7wEbKA at YnX;
z4ol$PM^s|G&92>>?7)ofzlH>Dd at 3SX*ZZ%4-Z+b9$Ws%I*uj8Ro}s5^PA%+5h!o9Z
zBk5yd2=C1LHXx`yr6#dWAR1skUwpY6R~&?S4 at d$EP|Y6MgBs{5K%jS_T_>G?!p6^Q
z9f(^rqodby<xq)bDh*1bmZqEo@|teEZV05`w{b9&v2eO^WZ#>=4;wiG at 2W1++1VF2
zj5{1J(!q4X-XmdSIC?!dX at EFa^-_vNorxK&uHE=Cs<|->_FG$vDGD1JoCTc72n35w
zkZJlIs+o-^_JLK)Jtjnhl!GKR$<;WEtqmUd1fCs(ZGA(2NNj+4ayC?s!Lic@#9Jb<
zGlsd|sv^fW$PbQ2kZZwmJ%1(uLrX|BT<)^aW%t~7m)CnQ@&?HG5JXZF6s*MY%I^&T
zcMcVVF+hgWM9aqrNs)+NIy#%Bpb`LUoy5z)(w4$K9Sa4s9#8l-905rI&@BW>8co%2
zuMj;H+lHjk^jz`Vijm1hA at qgAH{O at Es@NZ)wMmB+;?#Q|mMdaaGdtIgo=aVwNbVM3
z8~72RL9$iOnaeJqe4^rh9tLt_eZQ`-bVQ(SB*`Wvy2LvI5(+<n2uN;0;zb>!O^_xa
zPO96<4Hj6%Yl(B0(2uTsZriT=;ll^=wizegS^kT3N8$wPgtQDvpoI^}I*iCaNaKJ5
z#G<v0p)~`MOi$Qu(}eS6m_E}Z0LI*m&EISP+N9*dL_NQDOa%NN08iNuN2roud2oYA
zH3+zxrom8tg@&LvqMSAEjEIHEI5lz3)3igq%svGo`Vhy7bOy)}Y_cqm-m946l0JLh
zJaycynam54<|jkHV)mI~q6o6U!)S1=NU}cf%<!#r4hu$g`-<guD4y)O^0VeuozQ03
z?Z+d5!|r-y{-vDj5oQS at a_i%@dyi4mPyKYip#^fvmfh};!=D(ljIsH at f-KHi3b&_l
z0FkRe at 1(DB^6A1tr~*!w23IZpXX0;N(os9}7!hF%C(=2iSOgobTY2L@!C=HZp#S&=
z1m91&x#x{Ad}z#E4xDQGnoe at G%ipg4u>`i0j at Nt9#~_bu*9l!Ic(KQ6=vO520b}e{
z+JjinW`q9e7+NOaJA2}n#L@@ozv(H~qTW4vWoV)IV7=RI1GSdEW^WJmo}$8Y_3Bk4
zB&8UQ94|5XqnFvirQ5Xy5D0aZfXbSUGY#=G)3 at Pg78b&*AROzk1(E*WKg2;lv>pft
z%npd{OY_Khkz1mXV3Rc=WtE)*j-hM at nI;jj#}+(Ye5qvM at x$a449AXXx&JeY9&U2{
zcYyBr-!S_Ai*M)2WdT%ymf{Hj&vB0GLabAp{VvM^j%fg*kCT{zv4`M}mU6y*MnMFL
zUjqIv;|73l{M}l1&{9z}mvCYo^xr`HfXH>ApfY%>5<{mjQdhqR0L at z1p^P|p2n6#9
zzALghift9!^zR}G=0!RI!lw&^gnQWfWt?)J=ZE_(iMqsE;qr9G+!YU?l%PR2<6Z}r
z4225FW5{f+Vw-j*C+lo8YWoBUJok<z^g?K^E%>vtX+E2^G?3lLOU%$GV}bF(&uS34
z1{5&ZR^1Ancv1fwQsjT}2>+8q`Tu|W|B7Au|CJ|$*4yM3%t%5{6`Y*!O<icF-&u#n
zdVsQCCnX%Y=4k^4v31iroN>f%B`x;&SB5s&HK+^1;11|9gqd}2%LI<-AK%0<AfeFs
zSI0?!<HXZW8zi#h-ZP9kSBc*<^JEerRuTr}^Vsb1<Hy!$xS*4+6*xOX&+_`@RJdxI
z!9?@cFT}OMjX?edXUC%7gkP7CIl#V<_U$j*9yGUFLXi(D2Kt)rLb_&1o6OA)qqzZW
zK at nF0B}(<Nf02l%yI^LL0+OP$CIP6cRZM3(f<Q6;<BWwo<Xv3ca{u6rj?IXf6MsAP
zJ#t6uGP8tiA5UFm5-^*Xa?SNz{^n|a4zr1Gk#&J6 at g{bB<2Mrt>*hVU+HLNl6aS6J
zB~e^yE~G1ISrBlHf5|eaj;44F{3<N=8Hk54rDQ=SvW^8o#Q4|L14vS#c=giO>jE at 0
zz&p>ygwzrf|4~u5-~(h6gS>yZn4pz5 at wW^0!Gnn;tpM18Kaw0+N&BgxGVdAV?C;0A
zP#@(&4=l~^NoSpS=Hm1(KJ}E3QO~)Ms^XD+zca(-{l6|%7Oe))1Ac-u=2+Vdyp8)b
zNaN(D2l}M08UNy8prwBVw40<Dw-1M=IQ;uE3*!quVU%4sc)~kFr%VvM at goZZiJAq5
zFAfh`l^igbfkdGDr$(ADKqNN%r(Qk=a)L1UA7S}IlNaA{6VN?!j6CAh9|?uLgQj8^
zG$vtkFMZk3>>X;QrJQ8!GJ)3xX}PGZKt-QY%h*NDQKHOtI&x03&a2g_8vZOaFXNc&
zaj+}2C?Bm*b$LJv5x?0i0sqOfb^3D}(}Xk$2LjLUWhk2g_rm80*8jR+M#kd*k|{ra
z!T-;s{)H-}J;LXCaG`f)lQr{PJosJ(RTYT;C7ko5X$EiJ at hLZdFIrIE{|7;77BA2$
z at 8c_yq`_b~ZmY<Uo$`N3a4??U(0$Fa!F5wEPlgZ3JIU1MfV{jaz!-q1=&tY~X>9`R
zMuUQ^k>)H5mvpv9+Xw?zv|xSm4f(1Mx^id%W8gP0l1hN?qyQ at dF(ss-Q-mgE0WXb1
z-(Um`NXpRBs!{{xiZXP3BAHpkU|%V=ArY7gCG&tKRq-1N&;s>=2RTS3v}Eas1+F~K
zu{SHz0O3M6o4Dj7z?n!CLLNoX5;p-4qZ>dxBm)`X at pMs?>7v1eGGTM<sU)Nwa#a_H
zqDfncAoLTJLo!r(RI#HPZw6qXfuLIS^0dM=*FjdLk at J9v6%)#;Zn*zZQA-1!Xs9Ci
zkzk=Kq8iXd(odiqDh)_0KLy{J0b}l7mgJ_0F30NrD~|*o$?j2ozhdpzBf^>bJ2nZv
zu>ND^3ym9 at f2}p&5r5`zncZT)@XZZ7ZtQnZERXn}$@c7+ at TM=DSX$mU6_);Uj(u9V
z%gb<qm*rL5Tq6&ywg_1 at u9<dGrZHFEk>wOJl;Ln)COD}pjozoqG;mdyE>d-LbPOJh
zM?_KByGM}<59N6G%a^B~W|b%1Oi4*GmO2&-u#=olBW!#2V8CiaIx3{cRv->|gHLuu
zO%u3*59+THZ9ggbzy4AgIePNM39cZokdRnNwB*i!B2rRy_sW$k7-JJr*U+$17ygc#
zKA at 0&C at Lz77&?Q-^(U|d=RSKF7pDd%X0?kzp7`_NWKgtv%>k4*K7eESFxc0%uuEm{
z-fJ(hLOzt0l|2$i5bON at 2ENYURt~H(SYV}5giKgHHUSLkth^ljf>7m<7*TQYV`>&i
z`@I4A at qvdW994`HZtos;J-sU9{FCy3(&J#btfXnONX%~ygP-n;M-Z90VZ(+`2rs8`
zg`Pn{I$K&U96EjaDJi|s3jvs$^=KPl!|nPRjH57=a4S6Jfq|M&@#!x?8RX;V7jj5@
z#JhOWqSb)868ig$<@2_r4<7;}O#t+7&qt5eL}p at +opPmJ?L4AMs%dC6NBqD(S<J;H
zNbVry;AzwPeKiITYcz^MHmw*asycP*)O8?AXl_>il#}BHBZ+MAG<X2M#u??Jj64O?
zB>H$cV>?f&-21v44+h at B*_n-o*^|`N@<-bsd?Bi232M1{nua$qVR`)a-(nY^LQlpM
zGU>y?xL^g~>R7`3JrP{OczT|wk&j8mynJ~`dZ<-s0JFH~#%5QdNZkwMcpV^e4G$$n
zMQ<{sf+Lt|#19;=i`m)Nk-!cBOiSKjRn^t#XZluG>)#3pS0_~`TDbf)l1)cW9iFn@
z_=y~J4NN~_?QB7hz!O)YCH4BzqurRvcnTYBXHmyGhx<ZOD5W<6V}IR$WsZaF<T;Tc
z3(rSS((iS5zgUmTauf1?AN-)bs)s+4>!TR-pd^N3cmtmO_V6`Bhjn!Y;jO;Y>0LF7
zwOFO}$2B!4{@ixrYHQ^iEnD}E&=~8G(Z{>ak{U?l7Oz;r3t~rdCjZSfKz+P$aDG=K
z<ICgo8j>Xqfm_qv!ueD9;^wtqCy(^4f2pe8h28YtS4kDG&9v at ga8MxF3+CmC^iDm4
zg9XR1*iL~cThrVeAufpbI at +HlQ#@cF2dlV_7tRh24mn^ztpQKg7g+ at c>i8m-+_-tu
zlOD8CK5#hG?@RJ~4S=yP=H?#zSw);=vK{oibB8A>DG5c*CS2P~$ff?6JGU_R71|IL
z${R81;}e9i>K=q6k;oYP+q1AxjgOc2j;H71?A%;$h=B&ctbBr96LAtYWPDiHMe2vu
z5eL2T4hJwibsYjGP*?1P{m?+bCQSmXXZ28DyB{P*Cg$q`{QNeeF_;$90=H8m=@M2=
z%^K8Tet35WkZXE-dw;~LS_jky-NE-?zyA7~gw@#z$hIZohkUQJVbOgs_Uh{ErItAW
ziCBkW?MN~Bu-Fc1YYPkv3;^_4156AS0f!s{o=Ttk9`S2 at H8a#DZv}*63WS2yl6166
zc;T-2%*GKza=(G>^!f7^u-T4;wR|nz5#MYAGmQfW4<3xafE~atA|g`s3;6QOhz$;p
z<IfluF+m1D)vK!u|F#<3w#_sR1;G9XUj^gw at q=D098e3P(5G1E5tAa0%F4<E7cZuL
z=%L8BXwg$NO%C9ESq#@(Z$Ce+9wB&-;FJ-J=pl3O2yKAqhf-5hcZlqPpYFN%T4g#b
zEUGG7%eA^haw{7Y-HJn>;W%<=t%7Nn2C}@(pYHqk^!ywp&rhWu_0vtE&vr~C;IeLZ
z#Vc8mJsd!{Ni9~wtaQh%uDZrXen5Tdp9|8R$HcWf9^JD at TmYktB<HcTy-73~zEs8L
z>{%7Wt>}oH;Cm*CV?P!+KNs~Yo+*eP`iqEAbW8ZSxVZd3kA3=dAhJ`cMA50A(g1a_
z(e5xAz6%#FXy^>dgWIhZy&i^+5t7Gb4r4KS<D9>B4x)Mf;NW1_9p!D7d4)#8<&hWd
zwjo?Teg6DQb2*?J6^wm7ao9=yXz5wQ$w17Q226gJb(1faQw~m9fxKE4OAy2(XVV)u
zuG7{B24MY?%Su~E2g%cBcw()+m4|sZo_N~#-!I*Jml_O*yxveO$DD%iHC<pA(s{Ds
zSA;^rkrPNkJwrk)7B84T-xqcJ-#D7o2T<zpK-DC4!x_zuN4z)pis5iuht|Z>1q&8L
z#*93H<yX<^n+OCOv2&NztFZ5-Ji^`-kpDMmU~hG%!nMbB^ZJt>Rt9e6<=TrDH9_cw
z&e;LrmeF~TfEir?l6zb5v%pH$#3G$>1kOyxl33O8M|FZg#W;X)()<F at vG`FBF&eLc
z3BR8rwozBt_{v4B1J}Y+7F3k|nz?w*8oZV5Km@()&@WR{Q#;~ai#&)ze^EJ^t`xax
zExL=?{1F0p#Tt--&cT{4va7 at xyy*=uaQGy_!g+5kn)_>L8Q&lpj_U$$bM?&xn``S;
z9_l%r2Y84VpizAKh7=#8$&ugRd65;7_2lBd-d<lk7acK-|5B^PjAiQ>E(L=7nz!Mx
zcv0i=J%;G4L5;EXkw6Nnw$+4>7S%#>e|j;vkUn749Ni&}6B<X<>BVDh7S8;-y1E+7
zt}oEPsf7$nqoQI3+V`}TX$oJ&Aevj5?ciYv$MmdLw}$@(d6d7f*H*`sLT0iN#C&_V
zx)}M%9l<a?kEwb^{otoR*)`3n%?}9u$2nV4^%tk()=QoWwnlSV4G#}LK~pt36Da*5
z;ov)W^cCc7!r<RigCwCxG`b4Li<kD+;^{=LbVgbm6;m%yoctT4<Z4JQ{&uXh9-qC;
zjcK3GHe*I}gkfR0YI3HOnqGrq{`IrHF24_0x44z&poYfr#U8VY#7W#*P}ZyAA%-)K
zDYcV_M^^YEt6Z!?tnF)LY+8g#U|3j~@i4Z)GB+8p66B+hvDP#;hD8QP5JSN0Uhx|(
zFLJaRJihPv at rQeBi&*iXEZ&HXjg7H~^%f6EbIF-E3q8b4DpQl16EvHrwk&I%K$Kkm
zh<3%w4l?@`DLe`lN`%6-?<P_WKb?|w>fY}2GHx#O+-_VY`21=>K!EWuqMJe1vZYI(
zncp0O3B}KddU<1$UYT-%!yY&=F at wbmd~r%nu-O&xtT5#C6M~h1Zo=q892xheHi9XH
z#+KRQg!<r%qSE~QIn9>VW_fY_LqjdcOe(p)Odgic at 0QwUuUW8jRs1!Lf`cvgy~jMn
zjwx9wfJL$g)WOp)hqF)xm_=k)?l37<WQs<wzbbG>8iN4UH}Uf;)xhL>k)fgCB3QN6
zs}BDdGa1q3*HD+2zky>$@{`34T;)+nxiPS%q9*LyW>sBX^Inc<gICeYUbd~@RWTIH
zs3$RbyI}*aYn5-yna7jpr~cab4IuzD8VWx6c6M~AxCLlAmsK`z+iy~`MB##+-Mt;<
zZl<ZFS2ig5OZJ%PreD+%)>TzK-cwLh{4pn|KwI-o1d>V0 at 1nGm4#j7i at +(~27ww?e
z^5z8Jo7y&~Jb}|Wp5pOt|5_)7{^qZDCPd~OkGXGZ(R1&liO^9qM<<g+W at hI~Ujd23
zOCUx59PAYkz%Mh>q-=7&i6?qva^$z<eA72!J!yJv7xJQhuvq3sX<;}1{X2{8Z7eNc
zh{Z-mMjDrwyZX`6do8&4VehLVjoKH|+mde>dm|?NiRKlIwqLwffYxbok)2X`f$wvs
z*el=4_1>*h=1oEatHi|pUmt-*nOUBen%a|<7FhB at 5m_A3p--O{UfdbIV5WW&_5{=B
zj|kANw9Q^sR8{H0M2Zg$C~w5Mn|^+N^i~4{19xPJN=URAYnVu7>n`bwTi<G(7lk&%
zyHdejBERG0&O;9VMSpLMia&SH!M>OtecKI3tt at 8!##3$AieGL36U7(e1(|wdF6jI`
zL8>{>bHsy7>J-eOzs2gwM4r>o&^U1P==~V`IF^uB`<XZG5W&7ObQ|0W0W*C)zlST5
zkHW5O*kFqT+&C3kk97o>RcB|X>B?9QO&#57rMgCDmoFd-4b#pZgK{RU+3P21$T(y!
zmNy%ue7rKWzdbbaSl|6(hYyGBv&w1%rA#J6ri*>!8H=sYit3POyyj~sLHbGyu;uW~
z0%>s8$@YqrjhL6Q^#;=Ta$irLH6-|U+5&@t!rj6Pp!~~P2d3yc($~FV4PX~oGap;G
z!)(7fkMGgg8)FZv-l&I@>$RCPdi_CTW4X8BgUSnE1m8ZO6NOAfCLk=eu;y(W!6 at oG
z5^dmw<l}tf`)TIp=HJjg_UcFKZT!%GW+BT5?4!RuJUm!|NIQ$AigR)ldZr0RF9;KO
zYMUyRSMthra$SYn;_y<deJ$AaU at r_@(7F%k<PtysmvAN0I&pOmF$gt_pay+$GU6Ak
z?A2`#4$H)^KL*9%$&bMdduW*g-kZJ|BQ`^UUA)6)@Hl}Nov&9=Q1C+jP|@?f>^~pk
zeiN}pTES0Z4$8{97&{^&Co^58!2~7C@^zKZ4sR?HE^SNVvI4Q-e7;-h;<X4SU#_-I
zoi<JB1Zd|k5g)^J6;Q!78$5}LiAlCvhERoa%ZyKfh7lCmfqxL=2$bRFQ;rn>SB8rw
z*Skvlc?_8r=32g7b1l;Wlwfr~%cKikp`c#MY388|8<7d{LbtK`#d~OEqPQ?>LRjo<
zwTpatR at VMke;7w2O}T+Aqk&&Ugn6gs`}mOQo>glx;I-(m^NHkLS7v;}OmeS&5PHHT
z8qo&cjC}RQQ-ME0p*D6zTB6Yy5f$Z)mU2Mzi!d>VWxwl-o`YyQJw<uE;TI0p;)Vu)
zDzA$A;WGFXi#b9YluG~4$>>yv9V|YXM+^cHndpOP<9hq}+<y;wlFpegF0cI-X=`h*
z!<eCU!T0a;r4QF{*{kXucFd!6!&9_VlhcxjT!Rw#?q^|g#~VL at Xt^MBFOJZrp(LP?
zm#BHX`HZ!ZelvsJ5_nOA{GMHElH=R!fi7TQZ~0cpyB9B87V2=+r&%#XT8HR6i<J)?
z at B|ics|&NDK4PUjee~#`I at -NYkPK6rck|}WQ^WngBIcbJCSBt&a)iTDux~l>my(@6
z$SgGt4F-$H;ElZ=iPozNLN$oC15m_lf?={jJ{rfd@&Zs at pkIBmNZ8BMa~-nO=WgEd
ztR&pQC*VDsKi&2B-;_S^*<$Xqtl);$qjHlaWuXGG3fwT*;3$NoTj<jXzvzu?M4M>~
z*l-$B at c0pjdNQJ<o&yS%QveG5l at l+*;nn&zmjVYQv1Ct%jTX_HimHLY1ocKi3=6d?
zIP$Xqu+cz{-smHHSm0YPUbs-d$2AoN<V!Swq4f6wMD(%!VxI(!e#~`0tQDfYrw&bO
zZ|C7!Zi6h8p;WWExG*3(NQh`?&V at e^z#PRIuur#x4=1mv7-chzbBC(>b3?sma^q{K
zShUz?5&{>d^LaaT4<&%9vR|Opb<b&g0YWvJ=h4XqSS297DgcC2bf=PMbfn!m2mUap
z5$(Uh8_3eu)(<tQJYFE#9KFQoP1L6vpQT`I78$Z3KEXZ?LB8&*!95(!cfq~;2xd1q
zgVGP5!H7?7oRx?LYr$IfBR#Stro(T0vO$uinLg-)X&JJB&&|&Xfc;Mp1F0@=BS%BK
zjR$YlkDRmvgM!w}$mk)v*h~p7vb`G~9#md7AFDhA`W6K?c?AUr0bLD^4OEF at 0JX*j
z<zNBqDViMnx0ja}Ug;-<t5eWwFJ8KIJygbyrlt_d?%BJyq`S}-i>e+zc6T5Q%CGwl
z#<<L{zCJ$yx%Z*@JCDQxXr3Udu5*wWmSFw}ATsIRw)v<d1DIL~eqs&{yyJU-A<Tp7
ze$gVBhlCXylTT;rn>R}ry%?--Z;x&9hmP?8TIbd}hg*t(6s(t!NXcU^fis-{7AUFj
zBvZS+#a1l{2#<!tXK<b6VsQ}<?1S*&bOuO+?QemIsL=>sLhyEIm*v`@M#Mq}byO`2
zA#Pqu1J-OT?sXGN-3?jLES~OZ=iR#XOM}0pl#~yMj%qze0F?#>3T*}!v!iu1>I~qH
zn}74BrKJ at GXOWjPz8+M<3icYk8|!D+{kOxW at 5bMMFWkTX<g#TQzkc0Ck}40Zw|TFW
zF_dxR8<H;zIO}PU4`--P7e>@YrMWh}|HBsJcy}=2KH+RL%d2f_;sfE`7x7`0O3^gX
z%6(~ceV^UTnKK8_JDum?T#^$grSPxgv~8ozzzs+6&K7fU3>U`yxp?s!JV2_$0y?Kp
zpZ*cziY at 4PMQHYfABAo=M$GujgG+GD(4#Jgozm8N01*I=y#VvxK%%``3|nav`pMp?
zm5)l&qw<5ni~N-tgQWqq*4FNK|HvPk`p6`8nXRoY#rC<YcIGy}aCdj_#Ar7iGRQPi
z>fLUbKYKE1c~IHa)8m7A8Df~*NuNwkmw1$@D%4IghfDG=Zh&UQ7konnfNN1JTN)cT
zqR=`AmG-Zmo at l=w$?UIRRZ$(UL1<ly551L%yfg>Qp;Is(5k9mej*NFH=75u!EdB8e
z1V?kZrL_^}))L+WI3ZH{qvhGNcaX_sL*MiS$mcQ-lW$LM3`6zc2l(nQ at XVuQFi@Ap
zqL%_#Y_Wxf#jVWqEyYSm(l&s0C49*1ueSV>SO4r%om+Zy)x;9G2?Xj_SJx75Zf at X2
zQElgp)sb4ZR-|acNT&`*4|E1gv-9))UcTIJX=CFH%<X1KNJuyQc5xIxg<%$e6qWX7
zbi!@{;e5O9B8Z+@{vp6~US8-jxZ&>ZOILUBpgXGCzkxyb4-Ck|^^8IXMM*2A=Q=pV
z1L4s#pF at -f2&|{C?*?eYJa+!m)7{OktgPGwrU at R`t at QNtRM0v!oI4H&p{iBD0ndRk
zT44UvV^a_|hU}-NrG*~>*b5x6zf at H2NMdN8s}3^|Fjfxguk|QS(SYLz=ya~VQVLt-
zE_lobFmvb>JoSJI9(mk8u(9M_V39CziEl4X?#KJ{q0U5?<nOhx at 5|XNF99=Hw7q!|
z_akp|FX3sf_+1_1&odtUn{F}Xcdd=)KjU{A{D1!2tDmiqxtPj(^F(Je#8YN|GZ?P_
z?_b3K?G`g$yq+_@&KNyfSXKz9#Wq0bf7;Y$&byWOyC^eO)71 at 5g{nPX2d!yg_umQW
zBD~M-aN8*rMDzHa-GvM44&}R05b_oMCR511`49?!!-=o|>GRJ}-7~6Hw)gjst1w5n
Y57^vgI}?YYNcfW9dvH(8ZvD&u7mW{&ZU6uP

diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
index 7f0e023832dc1..23df637018ca4 100644
--- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -7408,9 +7408,9 @@ DenseMap<const SCEV *, Value *> LoopVectorizationPlanner::executePlan(
   // Regions are dissolved after optimizing for VF and UF, which completely
   // removes unneeded loop regions first.
   VPlanTransforms::dissolveLoopRegions(BestVPlan);
-  // Expand BranchOnMultiCond after dissolution, when latch has direct access
+  // Expand BranchOnTwoConds after dissolution, when latch has direct access
   // to its successors.
-  VPlanTransforms::expandBranchOnMultiCond(BestVPlan);
+  VPlanTransforms::expandBranchOnTwoConds(BestVPlan);
   // Canonicalize EVL loops after regions are dissolved.
   VPlanTransforms::canonicalizeEVLLoops(BestVPlan);
   VPlanTransforms::materializeBackedgeTakenCount(BestVPlan, VectorPH);
diff --git a/llvm/lib/Transforms/Vectorize/VPlan.cpp b/llvm/lib/Transforms/Vectorize/VPlan.cpp
index 738b8086488a0..7603ec9600d08 100644
--- a/llvm/lib/Transforms/Vectorize/VPlan.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlan.cpp
@@ -595,13 +595,13 @@ static bool hasConditionalTerminator(const VPBasicBlock *VPBB) {
   [[maybe_unused]] bool IsSwitch =
       isa<VPInstruction>(R) &&
       cast<VPInstruction>(R)->getOpcode() == Instruction::Switch;
-  [[maybe_unused]] bool IsBranchOnMultiCond = match(R, m_BranchOnMultiCond());
+  [[maybe_unused]] bool IsBranchOnTwoConds = match(R, m_BranchOnTwoConds());
   [[maybe_unused]] bool IsCondBranch =
       isa<VPBranchOnMaskRecipe>(R) ||
       match(R, m_CombineOr(m_BranchOnCond(), m_BranchOnCount()));
   if (VPBB->getNumSuccessors() == 2 ||
       (VPBB->isExiting() && !VPBB->getParent()->isReplicator())) {
-    assert((IsCondBranch || IsSwitch || IsBranchOnMultiCond) &&
+    assert((IsCondBranch || IsSwitch || IsBranchOnTwoConds) &&
            "block with multiple successors not terminated by "
            "conditional branch nor switch recipe");
 
@@ -609,9 +609,9 @@ static bool hasConditionalTerminator(const VPBasicBlock *VPBB) {
   }
 
   if (VPBB->getNumSuccessors() > 2) {
-    assert((IsSwitch || IsBranchOnMultiCond) &&
+    assert((IsSwitch || IsBranchOnTwoConds) &&
            "block with more than 2 successors not terminated by "
-           "a switch or branch-on-multi-cond recipe");
+           "a switch or branch-on-two-conds recipe");
     return true;
   }
 
diff --git a/llvm/lib/Transforms/Vectorize/VPlan.h b/llvm/lib/Transforms/Vectorize/VPlan.h
index 14a159bf893b2..e7660e7eb9931 100644
--- a/llvm/lib/Transforms/Vectorize/VPlan.h
+++ b/llvm/lib/Transforms/Vectorize/VPlan.h
@@ -1058,12 +1058,11 @@ class LLVM_ABI_FOR_TEST VPInstruction : public VPRecipeWithIRFlags,
     // lowered to ICmp + BranchOnCond during VPlan to VPlan transformation.
     BranchOnCount,
     BranchOnCond,
-    // Multi-way branch with N boolean condition operands and N+1 successors.
-    // If condition i is true, branches to successor i; otherwise falls through
-    // to check the next condition. If all conditions are false, branches to
-    // the final successor. Expanded to a chain of BranchOnCond after region
-    // dissolution.
-    BranchOnMultiCond,
+    // Branch with 2 boolean condition operands and 3 successors. If condition
+    // 0 is true, branches to successor 0; if condition 1 is true, branches to
+    // successor 1; otherwise branches to successor 2. Expanded to a chain of
+    // BranchOnCond after region dissolution.
+    BranchOnTwoConds,
     Broadcast,
     /// Given operands of (the same) struct type, creates a struct of fixed-
     /// width vectors each containing a struct field of all operands. The
@@ -1220,7 +1219,7 @@ class LLVM_ABI_FOR_TEST VPInstruction : public VPRecipeWithIRFlags,
     case Instruction::Fence:
     case Instruction::AtomicRMW:
     case VPInstruction::BranchOnCond:
-    case VPInstruction::BranchOnMultiCond:
+    case VPInstruction::BranchOnTwoConds:
     case VPInstruction::BranchOnCount:
       return false;
     default:
diff --git a/llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp b/llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp
index 6b0b7f834e997..0a2bec427d9c8 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp
@@ -136,7 +136,7 @@ Type *VPTypeAnalysis::inferScalarTypeForRecipe(const VPInstruction *R) {
     // Return the type based on first operand.
     return inferScalarType(R->getOperand(0));
   case VPInstruction::BranchOnCond:
-  case VPInstruction::BranchOnMultiCond:
+  case VPInstruction::BranchOnTwoConds:
   case VPInstruction::BranchOnCount:
     return Type::getVoidTy(Ctx);
   default:
diff --git a/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h b/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h
index 43173f6eef0cc..ebb227f58bcf5 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h
+++ b/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h
@@ -374,15 +374,15 @@ m_BranchOnCond(const Op0_t &Op0) {
   return m_VPInstruction<VPInstruction::BranchOnCond>(Op0);
 }
 
-inline VPInstruction_match<VPInstruction::BranchOnMultiCond>
-m_BranchOnMultiCond() {
-  return m_VPInstruction<VPInstruction::BranchOnMultiCond>();
+inline VPInstruction_match<VPInstruction::BranchOnTwoConds>
+m_BranchOnTwoConds() {
+  return m_VPInstruction<VPInstruction::BranchOnTwoConds>();
 }
 
 template <typename Op0_t, typename Op1_t>
-inline VPInstruction_match<VPInstruction::BranchOnMultiCond, Op0_t, Op1_t>
-m_BranchOnMultiCond(const Op0_t &Op0, const Op1_t &Op1) {
-  return m_VPInstruction<VPInstruction::BranchOnMultiCond>(Op0, Op1);
+inline VPInstruction_match<VPInstruction::BranchOnTwoConds, Op0_t, Op1_t>
+m_BranchOnTwoConds(const Op0_t &Op0, const Op1_t &Op1) {
+  return m_VPInstruction<VPInstruction::BranchOnTwoConds>(Op0, Op1);
 }
 
 template <typename Op0_t>
diff --git a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
index 3b62058a22c1b..26faf4e0714d7 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
@@ -172,7 +172,7 @@ bool VPRecipeBase::mayHaveSideEffects() const {
     return mayWriteToMemory() ||
            VPI->getOpcode() == VPInstruction::BranchOnCount ||
            VPI->getOpcode() == VPInstruction::BranchOnCond ||
-           VPI->getOpcode() == VPInstruction::BranchOnMultiCond;
+           VPI->getOpcode() == VPInstruction::BranchOnTwoConds;
   }
   case VPWidenCallSC: {
     Function *Fn = cast<VPWidenCallRecipe>(this)->getCalledScalarFunction();
@@ -454,6 +454,7 @@ unsigned VPInstruction::getNumOperandsForOpcode(unsigned Opcode) {
   case Instruction::ExtractElement:
   case Instruction::Store:
   case VPInstruction::BranchOnCount:
+  case VPInstruction::BranchOnTwoConds:
   case VPInstruction::ComputeReductionResult:
   case VPInstruction::ExtractLane:
   case VPInstruction::FirstOrderRecurrenceSplice:
@@ -474,7 +475,6 @@ unsigned VPInstruction::getNumOperandsForOpcode(unsigned Opcode) {
   case Instruction::PHI:
   case Instruction::Switch:
   case VPInstruction::AnyOf:
-  case VPInstruction::BranchOnMultiCond:
   case VPInstruction::FirstActiveLane:
   case VPInstruction::LastActiveLane:
   case VPInstruction::SLPLoad:
@@ -501,7 +501,7 @@ bool VPInstruction::canGenerateScalarForFirstLane() const {
   case Instruction::PHI:
   case Instruction::Select:
   case VPInstruction::BranchOnCond:
-  case VPInstruction::BranchOnMultiCond:
+  case VPInstruction::BranchOnTwoConds:
   case VPInstruction::BranchOnCount:
   case VPInstruction::CalculateTripCountMinusVF:
   case VPInstruction::CanonicalIVIncrementForPart:
@@ -659,8 +659,8 @@ Value *VPInstruction::generate(VPTransformState &State) {
     applyMetadata(*Br);
     return Br;
   }
-  case VPInstruction::BranchOnMultiCond:
-    llvm_unreachable("BranchOnMultiCond should be expanded before execution");
+  case VPInstruction::BranchOnTwoConds:
+    llvm_unreachable("BranchOnTwoConds should be expanded before execution");
   case VPInstruction::Broadcast: {
     return Builder.CreateVectorSplat(
         State.VF, State.get(getOperand(0), /*IsScalar*/ true), "broadcast");
@@ -1184,7 +1184,7 @@ bool VPInstruction::opcodeMayReadOrWriteFromMemory() const {
   case Instruction::PHI:
   case VPInstruction::AnyOf:
   case VPInstruction::BranchOnCond:
-  case VPInstruction::BranchOnMultiCond:
+  case VPInstruction::BranchOnTwoConds:
   case VPInstruction::BranchOnCount:
   case VPInstruction::Broadcast:
   case VPInstruction::BuildStructVector:
@@ -1279,7 +1279,7 @@ bool VPInstruction::usesFirstPartOnly(const VPValue *Op) const {
     return vputils::onlyFirstPartUsed(this);
   case VPInstruction::BranchOnCount:
   case VPInstruction::BranchOnCond:
-  case VPInstruction::BranchOnMultiCond:
+  case VPInstruction::BranchOnTwoConds:
   case VPInstruction::CanonicalIVIncrementForPart:
     return true;
   };
@@ -1323,8 +1323,8 @@ void VPInstruction::printRecipe(raw_ostream &O, const Twine &Indent,
   case VPInstruction::BranchOnCond:
     O << "branch-on-cond";
     break;
-  case VPInstruction::BranchOnMultiCond:
-    O << "branch-on-multi-cond";
+  case VPInstruction::BranchOnTwoConds:
+    O << "branch-on-two-conds";
     break;
   case VPInstruction::CalculateTripCountMinusVF:
     O << "TC > VF ? TC - VF : 0";
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index 9e1bba0d07178..8507a9bd68652 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -3714,57 +3714,51 @@ void VPlanTransforms::dissolveLoopRegions(VPlan &Plan) {
     R->dissolveToCFGLoop();
 }
 
-void VPlanTransforms::expandBranchOnMultiCond(VPlan &Plan) {
-  // Expand BranchOnMultiCond instructions into explicit CFG with branching.
-  // This must run after dissolveLoopRegions, when successors have been
-  // restored.
-  SmallVector<VPBasicBlock *> WorkList;
+void VPlanTransforms::expandBranchOnTwoConds(VPlan &Plan) {
+  // Expand BranchOnTwoConds instructions into explicit CFG with
+  // single-condition branches
+  SmallVector<VPInstruction *> WorkList;
   for (VPBasicBlock *VPBB : VPBlockUtils::blocksOnly<VPBasicBlock>(
            vp_depth_first_shallow(Plan.getEntry()))) {
-    if (VPBB->empty())
-      continue;
-    if (match(&VPBB->back(), m_BranchOnMultiCond()))
-      WorkList.push_back(VPBB);
-  }
-
-  for (VPBasicBlock *VPBB : WorkList) {
-    auto *BMC = cast<VPInstruction>(&VPBB->back());
-
-    unsigned NumConds = BMC->getNumOperands();
-    assert(NumConds > 0 &&
-           "BranchOnMultiCond must have at least one condition");
-    DebugLoc DL = BMC->getDebugLoc();
+    assert((!isa<VPRegionBlock>(VPBB) ||
+            cast<VPRegionBlock>(VPBB)->isReplicator()) &&
+           "only replicating regions must remain");
+    if (!VPBB->empty() && match(&VPBB->back(), m_BranchOnTwoConds()))
+      WorkList.push_back(cast<VPInstruction>(&VPBB->back()));
+  }
+
+  for (VPInstruction *Br : WorkList) {
+    assert(Br->getNumOperands() == 2 &&
+           "BranchOnTwoConds must have exactly 2 conditions");
+    DebugLoc DL = Br->getDebugLoc();
+    VPBasicBlock *VPBB = Br->getParent();
     const auto Successors = to_vector(VPBB->getSuccessors());
-    assert(Successors.size() == NumConds + 1 &&
-           "BranchOnMultiCond must have N operands and N+1 successors");
+    assert(Successors.size() == 3 &&
+           "BranchOnTwoConds must have exactly 3 successors");
 
-    // Disconnect all successors.
     for (VPBlockBase *Succ : Successors)
       VPBlockUtils::disconnectBlocks(VPBB, Succ);
 
-    // Create chain of conditional branches. Each condition branches to its
-    // corresponding successor on true, and to the next condition block (or the
-    // final successor) on false.
-    VPBasicBlock *CurrentBlock = VPBB;
-    for (const auto &[I, Cond] : enumerate(BMC->operands())) {
-      VPBlockBase *TrueSucc = Successors[I];
-      VPBlockBase *FalseSucc = Successors[NumConds];
-      if (I + 1 != NumConds) {
-        auto *FalseBlock = Plan.createVPBasicBlock(
-            (Twine(VPBB->getName()) + ".multi.cond." + Twine(I + 1)).str());
-        FalseBlock->setParent(VPBB->getParent());
-        FalseSucc = FalseBlock;
-      }
+    // Create an intermediate block for the second condition check.
+    auto *SecondCondBlock =
+        Plan.createVPBasicBlock((Twine(VPBB->getName()) + ".cond.1").str());
+    SecondCondBlock->setParent(VPBB->getParent());
 
-      VPBuilder(CurrentBlock)
-          .createNaryOp(VPInstruction::BranchOnCond, {Cond}, DL);
-      VPBlockUtils::connectBlocks(CurrentBlock, TrueSucc);
-      VPBlockUtils::connectBlocks(CurrentBlock, FalseSucc);
+    VPValue *Cond0 = Br->getOperand(0);
+    VPBlockBase *Succ0 = Successors[0];
+    VPBuilder(VPBB).createNaryOp(VPInstruction::BranchOnCond, {Cond0}, DL);
+    VPBlockUtils::connectBlocks(VPBB, Succ0);
+    VPBlockUtils::connectBlocks(VPBB, SecondCondBlock);
 
-      CurrentBlock = cast<VPBasicBlock>(FalseSucc);
-    }
+    VPValue *Cond1 = Br->getOperand(1);
+    VPBlockBase *Succ1 = Successors[1];
+    VPBlockBase *Succ2 = Successors[2];
+    VPBuilder(SecondCondBlock)
+        .createNaryOp(VPInstruction::BranchOnCond, {Cond1}, DL);
+    VPBlockUtils::connectBlocks(SecondCondBlock, Succ1);
+    VPBlockUtils::connectBlocks(SecondCondBlock, Succ2);
 
-    BMC->eraseFromParent();
+    Br->eraseFromParent();
   }
 }
 
@@ -3897,7 +3891,7 @@ void VPlanTransforms::handleUncountableEarlyExit(VPBasicBlock *EarlyExitingVPBB,
                                                  VPlan &Plan,
                                                  VPBasicBlock *HeaderVPBB,
                                                  VPBasicBlock *LatchVPBB) {
-  VPBlockBase *MiddleVPBB = LatchVPBB->getSuccessors()[0];
+  auto *MiddleVPBB = cast<VPBasicBlock>(LatchVPBB->getSuccessors()[0]);
   if (!EarlyExitVPBB->getSinglePredecessor() &&
       EarlyExitVPBB->getPredecessors()[1] == MiddleVPBB) {
     assert(EarlyExitVPBB->getNumPredecessors() == 2 &&
@@ -3920,49 +3914,50 @@ void VPlanTransforms::handleUncountableEarlyExit(VPBasicBlock *EarlyExitingVPBB,
                               ? CondOfEarlyExitingVPBB
                               : Builder.createNot(CondOfEarlyExitingVPBB);
 
-  // Create a BranchOnMultiCond in the latch that branches to:
+  // Create a BranchOnTwoConds in the latch that branches to:
   // [0] vector.early.exit, [1] middle block, [2] header (continue looping).
   VPValue *IsEarlyExitTaken =
       Builder.createNaryOp(VPInstruction::AnyOf, {CondToEarlyExit});
   VPBasicBlock *VectorEarlyExitVPBB =
       Plan.createVPBasicBlock("vector.early.exit");
-  VectorEarlyExitVPBB->setParent(LatchVPBB->getParent());
+  VectorEarlyExitVPBB->setParent(EarlyExitVPBB->getParent());
 
   // Update PHI operands: copy from EarlyExitingVPBB to VectorEarlyExitVPBB.
   unsigned PredIdx = EarlyExitVPBB->getIndexForPredecessor(EarlyExitingVPBB);
   VPBlockUtils::connectBlocks(VectorEarlyExitVPBB, EarlyExitVPBB);
 
   VPBuilder EarlyExitB(VectorEarlyExitVPBB);
-  VPBuilder MiddleBuilder(cast<VPBasicBlock>(MiddleVPBB));
+  VPBuilder MiddleBuilder(MiddleVPBB);
   for (VPRecipeBase &R : EarlyExitVPBB->phis()) {
     auto *ExitIRI = cast<VPIRPhi>(&R);
-
-    // Move operand from EarlyExitingVPBB to VectorEarlyExitVPBB.
-    VPValue *IncomingFromEarlyExit = ExitIRI->getOperand(PredIdx);
-    ExitIRI->addOperand(IncomingFromEarlyExit);
-    ExitIRI->removeIncomingValueFor(EarlyExitingVPBB);
-
-    // Early exit operand is now at the last position.
-    unsigned EarlyExitIdx = ExitIRI->getNumOperands() - 1;
+    VPValue *IncomingFromEarlyExiting = ExitIRI->getOperand(PredIdx);
     if (ExitIRI->getNumOperands() != 1) {
-      // The first operand corresponds to the latch exit via MiddleVPBB.
+      // Both loop exits go to the same block. Move the operand of ExitIRI
+      // coming from EarlyExitingVPBB to appear last.
+      ExitIRI->addOperand(IncomingFromEarlyExiting);
+      ExitIRI->removeIncomingValueFor(EarlyExitingVPBB);
       ExitIRI->extractLastLaneOfLastPartOfFirstOperand(MiddleBuilder);
     }
 
-    if (!IncomingFromEarlyExit->isLiveIn()) {
+    if (!IncomingFromEarlyExiting->isLiveIn()) {
+      // Update the incoming value from the early exit.
       VPValue *FirstActiveLane = EarlyExitB.createNaryOp(
           VPInstruction::FirstActiveLane, {CondToEarlyExit},
           DebugLoc::getUnknown(), "first.active.lane");
-      IncomingFromEarlyExit = EarlyExitB.createNaryOp(
-          VPInstruction::ExtractLane, {FirstActiveLane, IncomingFromEarlyExit},
-          DebugLoc::getUnknown(), "early.exit.value");
-      ExitIRI->setOperand(EarlyExitIdx, IncomingFromEarlyExit);
+      IncomingFromEarlyExiting =
+          EarlyExitB.createNaryOp(VPInstruction::ExtractLane,
+                                  {FirstActiveLane, IncomingFromEarlyExiting},
+                                  DebugLoc::getUnknown(), "early.exit.value");
+      unsigned EarlyExitIdx = ExitIRI->getNumOperands() - 1;
+      ExitIRI->setOperand(EarlyExitIdx, IncomingFromEarlyExiting);
     }
   }
 
-  // Get the old latch terminator to extract the trip count condition.
+  // Replace the conditional branch controlling the latch exit from the vector
+  // loop with a multi-conditional branch exiting to vector early exit if the
+  // early exit has been taken, exiting to middle block if the original
+  // condition of the vector latch is true, otherwise continuing back to header.
   auto *LatchExitingBranch = cast<VPInstruction>(LatchVPBB->getTerminator());
-  // Skip single-iteration loop region
   assert(LatchExitingBranch->getOpcode() == VPInstruction::BranchOnCount &&
          "Unexpected terminator");
   auto *IsLatchExitTaken =
@@ -3973,7 +3968,7 @@ void VPlanTransforms::handleUncountableEarlyExit(VPBasicBlock *EarlyExitingVPBB,
   LatchExitingBranch->eraseFromParent();
 
   Builder.setInsertPoint(LatchVPBB);
-  Builder.createNaryOp(VPInstruction::BranchOnMultiCond,
+  Builder.createNaryOp(VPInstruction::BranchOnTwoConds,
                        {IsEarlyExitTaken, IsLatchExitTaken}, LatchDL);
   LatchVPBB->clearSuccessors();
   LatchVPBB->setSuccessors({VectorEarlyExitVPBB, MiddleVPBB, HeaderVPBB});
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.h b/llvm/lib/Transforms/Vectorize/VPlanTransforms.h
index 64459c79abdaf..f993bf18050d9 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.h
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.h
@@ -270,11 +270,9 @@ struct VPlanTransforms {
   static void removeDeadRecipes(VPlan &Plan);
 
   /// Update \p Plan to account for the uncountable early exit from \p
-  /// EarlyExitingVPBB to \p EarlyExitVPBB by
-  ///  * updating the condition exiting the loop via the latch to include the
-  ///    early exit condition,
-  ///  * splitting the original middle block to branch to the early exit block
-  ///    conditionally - according to the early exit condition.
+  /// EarlyExitingVPBB to \p EarlyExitVPBB by introducing a BranchOnTwoConds
+  /// terminator in the latch that handles the early exit and the latch exit
+  /// condition.
   static void handleUncountableEarlyExit(VPBasicBlock *EarlyExitingVPBB,
                                          VPBasicBlock *EarlyExitVPBB,
                                          VPlan &Plan, VPBasicBlock *HeaderVPBB,
@@ -283,9 +281,9 @@ struct VPlanTransforms {
   /// Replace loop regions with explicit CFG.
   static void dissolveLoopRegions(VPlan &Plan);
 
-  /// Expand BranchOnMultiCond instructions into explicit CFG with
+  /// Expand BranchOnTwoConds instructions into explicit CFG with
   /// BranchOnCond instructions. Should be called after dissolveLoopRegions.
-  static void expandBranchOnMultiCond(VPlan &Plan);
+  static void expandBranchOnTwoConds(VPlan &Plan);
 
   /// Transform EVL loops to use variable-length stepping after region
   /// dissolution.
diff --git a/llvm/lib/Transforms/Vectorize/VPlanUtils.cpp b/llvm/lib/Transforms/Vectorize/VPlanUtils.cpp
index d3876543aaca2..53e149ab8640e 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanUtils.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanUtils.cpp
@@ -344,7 +344,7 @@ vputils::getRecipesForUncountableExit(VPlan &Plan,
   //     EMIT vp<%5> = any-of vp<%4>
   //     EMIT vp<%6> = add vp<%2>, vp<%0>
   //     EMIT vp<%7> = icmp eq vp<%6>, ir<64>
-  //     EMIT branch-on-muli-cond vp<%5>, vp<%8>
+  //     EMIT branch-on-two-conds vp<%5>, vp<%7>
   //   No successors
   // }
   // Successor(s): early.exit, middle.block
@@ -360,8 +360,8 @@ vputils::getRecipesForUncountableExit(VPlan &Plan,
   auto *Region = Plan.getVectorLoopRegion();
   VPValue *UncountableCondition = nullptr;
   if (!match(Region->getExitingBasicBlock()->getTerminator(),
-             m_BranchOnMultiCond(m_AnyOf(m_VPValue(UncountableCondition)),
-                                 m_VPValue())))
+             m_BranchOnTwoConds(m_AnyOf(m_VPValue(UncountableCondition)),
+                                m_VPValue())))
     return std::nullopt;
 
   SmallVector<VPValue *, 4> Worklist;
diff --git a/llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp b/llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp
index 6702449fa6bee..eb3d54db00b85 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp
@@ -391,23 +391,21 @@ static bool hasDuplicates(const SmallVectorImpl<VPBlockBase *> &VPBlockVec) {
 bool VPlanVerifier::verifyBlock(const VPBlockBase *VPB) {
   auto *VPBB = dyn_cast<VPBasicBlock>(VPB);
   // Check block's condition bit.
-  if (!isa<VPIRBasicBlock>(VPB)) {
+  if (VPBB && !isa<VPIRBasicBlock>(VPB)) {
     // VPRegionBlocks can have multiple successors (e.g., with
-    // BranchOnMultiCond) without needing a terminator, so only check
-    // VPBasicBlocks
-    if (VPBB && (VPB->getNumSuccessors() > 1 ||
-                 (VPBB->getParent() && VPBB->isExiting() &&
-                  !VPBB->getParent()->isReplicator()))) {
+    // BranchOnTwoConds) without needing a terminator, so only check
+    // VPBasicBlocks.
+    if (VPB->getNumSuccessors() > 1 ||
+        (VPBB->getParent() && VPBB->isExiting() &&
+         !VPBB->getParent()->isReplicator())) {
       if (!VPBB->getTerminator()) {
         errs() << "Block has multiple successors but doesn't "
                   "have a proper branch recipe!\n";
         return false;
       }
-    } else if (VPBB) {
-      if (VPBB->getTerminator()) {
-        errs() << "Unexpected branch recipe!\n";
-        return false;
-      }
+    } else if (VPBB->getTerminator()) {
+      errs() << "Unexpected branch recipe!\n";
+      return false;
     }
   }
 
@@ -535,16 +533,16 @@ bool VPlanVerifier::verify(const VPlan &Plan) {
 
   if (Exiting->empty()) {
     errs() << "VPlan vector loop exiting block must end with BranchOnCount, "
-              "BranchOnCond, or BranchOnMultiCond VPInstruction but is empty\n";
+              "BranchOnCond, or BranchOnTwoConds VPInstruction but is empty\n";
     return false;
   }
 
   auto *LastInst = dyn_cast<VPInstruction>(std::prev(Exiting->end()));
   if (!match(LastInst, m_CombineOr(m_BranchOnCond(),
                                    m_CombineOr(m_BranchOnCount(),
-                                               m_BranchOnMultiCond())))) {
+                                               m_BranchOnTwoConds())))) {
     errs() << "VPlan vector loop exit must end with BranchOnCount, "
-              "BranchOnCond, or BranchOnMultiCond VPInstruction\n";
+              "BranchOnCond, or BranchOnTwoConds VPInstruction\n";
     return false;
   }
 
diff --git a/llvm/test/Transforms/LoopVectorize/AArch64/simple_early_exit.ll b/llvm/test/Transforms/LoopVectorize/AArch64/simple_early_exit.ll
index 233f3ee525d6b..b145bd004243d 100644
--- a/llvm/test/Transforms/LoopVectorize/AArch64/simple_early_exit.ll
+++ b/llvm/test/Transforms/LoopVectorize/AArch64/simple_early_exit.ll
@@ -37,7 +37,7 @@ define i64 @same_exit_block_pre_inc_use1() #1 {
 ; CHECK-NEXT:    [[TMP17:%.*]] = call i1 @llvm.vector.reduce.or.nxv16i1(<vscale x 16 x i1> [[TMP8]])
 ; CHECK-NEXT:    [[TMP18:%.*]] = icmp eq i64 [[INDEX_NEXT3]], [[N_VEC]]
 ; CHECK-NEXT:    br i1 [[TMP17]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP18]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 64, [[N_VEC]]
@@ -118,7 +118,7 @@ define i64 @same_exit_block_pre_inc_use4() {
 ; CHECK-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT2]], 64
 ; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <2 x i64> [[VEC_IND]], splat (i64 2)
 ; CHECK-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -179,7 +179,7 @@ define i64 @loop_contains_safe_call() #1 {
 ; CHECK-NEXT:    [[TMP6:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP7:%.*]] = icmp eq i64 [[INDEX_NEXT2]], 64
 ; CHECK-NEXT:    br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -246,7 +246,7 @@ define i64 @loop_contains_safe_div() #1 {
 ; CHECK-NEXT:    [[TMP6:%.*]] = call i1 @llvm.vector.reduce.or.nxv4i1(<vscale x 4 x i1> [[TMP9]])
 ; CHECK-NEXT:    [[TMP7:%.*]] = icmp eq i64 [[INDEX_NEXT2]], [[INDEX1]]
 ; CHECK-NEXT:    br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 64, [[INDEX1]]
@@ -325,7 +325,7 @@ define i64 @loop_contains_load_after_early_exit(ptr dereferenceable(1024) align(
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[TMP9:%.*]] = extractelement <4 x i64> [[WIDE_LOAD2]], i32 3
@@ -409,7 +409,7 @@ define i32 @diff_exit_block_needs_scev_check(i32 %end) {
 ; CHECK-NEXT:    [[TMP15:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP13]])
 ; CHECK-NEXT:    [[TMP16:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
 ; CHECK-NEXT:    br i1 [[TMP15]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP16]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[UMAX1]], [[N_VEC]]
diff --git a/llvm/test/Transforms/LoopVectorize/AArch64/single-early-exit-interleave.ll b/llvm/test/Transforms/LoopVectorize/AArch64/single-early-exit-interleave.ll
index 187a95728fdf3..be82965cc6649 100644
--- a/llvm/test/Transforms/LoopVectorize/AArch64/single-early-exit-interleave.ll
+++ b/llvm/test/Transforms/LoopVectorize/AArch64/single-early-exit-interleave.ll
@@ -61,7 +61,7 @@ define i64 @same_exit_block_pre_inc_use1() #0 {
 ; CHECK-NEXT:    [[TMP12:%.*]] = call i1 @llvm.vector.reduce.or.nxv16i1(<vscale x 16 x i1> [[TMP33]])
 ; CHECK-NEXT:    [[TMP35:%.*]] = icmp eq i64 [[INDEX_NEXT3]], [[N_VEC]]
 ; CHECK-NEXT:    br i1 [[TMP12]], label [[VECTOR_EARLY_EXIT:%.*]], label [[LOOP_INC]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP35]], label [[MIDDLE_BLOCK:%.*]], label [[LOOP]], !llvm.loop [[LOOP0:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 510, [[N_VEC]]
diff --git a/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave.ll b/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave.ll
index df8414060918a..01776e5283298 100644
--- a/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave.ll
+++ b/llvm/test/Transforms/LoopVectorize/single-early-exit-interleave.ll
@@ -36,7 +36,7 @@ define i64 @multi_exiting_to_different_exits_live_in_exit_values() {
 ; VF4IC4-NEXT:    [[TMP3:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP11]])
 ; VF4IC4-NEXT:    [[TMP4:%.*]] = icmp eq i64 [[INDEX_NEXT]], 128
 ; VF4IC4-NEXT:    br i1 [[TMP3]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4:       vector.body.cond.1:
 ; VF4IC4-NEXT:    br i1 [[TMP4]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[E2:%.*]]
@@ -117,7 +117,7 @@ define i64 @same_exit_block_pre_inc_use1() {
 ; VF4IC4-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP16]])
 ; VF4IC4-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT]], 64
 ; VF4IC4-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4:       vector.body.cond.1:
 ; VF4IC4-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[LOOP_END:%.*]]
@@ -203,7 +203,7 @@ define ptr @same_exit_block_pre_inc_use1_ivptr() {
 ; VF4IC4-NEXT:    [[TMP10:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP9]])
 ; VF4IC4-NEXT:    [[TMP11:%.*]] = icmp eq i64 [[INDEX_NEXT]], 1024
 ; VF4IC4-NEXT:    br i1 [[TMP10]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4:       vector.body.cond.1:
 ; VF4IC4-NEXT:    br i1 [[TMP11]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[LOOP_END:%.*]]
@@ -295,7 +295,7 @@ define i64 @same_exit_block_post_inc_use() {
 ; VF4IC4-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP16]])
 ; VF4IC4-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT]], 64
 ; VF4IC4-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4:       vector.body.cond.1:
 ; VF4IC4-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[LOOP_END:%.*]]
@@ -391,7 +391,7 @@ define i64 @diff_exit_block_pre_inc_use1() {
 ; VF4IC4-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP16]])
 ; VF4IC4-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT]], 64
 ; VF4IC4-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4:       vector.body.cond.1:
 ; VF4IC4-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[LOOP_END:%.*]]
@@ -492,7 +492,7 @@ define i64 @diff_exit_block_post_inc_use1() {
 ; VF4IC4-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP16]])
 ; VF4IC4-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT]], 64
 ; VF4IC4-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4:       vector.body.cond.1:
 ; VF4IC4-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP7:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[LOOP_END:%.*]]
@@ -611,7 +611,7 @@ define i64 @same_exit_block_pre_inc_use1_reverse() {
 ; VF4IC4-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP24]])
 ; VF4IC4-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT]], 1008
 ; VF4IC4-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4:       vector.body.cond.1:
 ; VF4IC4-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[SCALAR_PH:%.*]]
@@ -721,7 +721,7 @@ define i8 @same_exit_block_use_loaded_value() {
 ; VF4IC4-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP16]])
 ; VF4IC4-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT]], 1024
 ; VF4IC4-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4:       vector.body.cond.1:
 ; VF4IC4-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP10:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[LOOP_END:%.*]]
@@ -847,7 +847,7 @@ define i8 @same_exit_block_reverse_use_loaded_value() {
 ; VF4IC4-NEXT:    [[TMP25:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP24]])
 ; VF4IC4-NEXT:    [[TMP26:%.*]] = icmp eq i64 [[INDEX_NEXT]], 1008
 ; VF4IC4-NEXT:    br i1 [[TMP25]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; VF4IC4:       vector.body.multi.cond.1:
+; VF4IC4:       vector.body.cond.1:
 ; VF4IC4-NEXT:    br i1 [[TMP26]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP11:![0-9]+]]
 ; VF4IC4:       middle.block:
 ; VF4IC4-NEXT:    br label [[SCALAR_PH:%.*]]
diff --git a/llvm/test/Transforms/LoopVectorize/single_early_exit.ll b/llvm/test/Transforms/LoopVectorize/single_early_exit.ll
index 601cdd0bd0e38..88c7ca6cf37d9 100644
--- a/llvm/test/Transforms/LoopVectorize/single_early_exit.ll
+++ b/llvm/test/Transforms/LoopVectorize/single_early_exit.ll
@@ -27,7 +27,7 @@ define i64 @same_exit_block_phi_of_consts() {
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -87,7 +87,7 @@ define i64 @diff_exit_block_phi_of_consts() {
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -168,7 +168,7 @@ define i32 @diff_exit_block_needs_scev_check(i32 %end) {
 ; CHECK-NEXT:    [[TMP15:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP13]])
 ; CHECK-NEXT:    [[TMP16:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
 ; CHECK-NEXT:    br i1 [[TMP15]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP16]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[UMAX1]], [[N_VEC]]
@@ -255,7 +255,7 @@ define i32 @diff_blocks_invariant_early_exit_cond(ptr %s) {
 ; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[INDEX_NEXT]], 276
 ; CHECK-NEXT:    br i1 [[TMP1]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP2]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[FOR_END:%.*]]
@@ -316,7 +316,7 @@ define void @inner_loop_trip_count_depends_on_outer_iv(ptr align 8 dereferenceab
 ; CHECK-NEXT:    [[TMP3:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP2]])
 ; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
 ; CHECK-NEXT:    br i1 [[TMP3]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP4]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP7:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[OUTER_IV]], [[N_VEC]]
@@ -412,7 +412,7 @@ define i64 @loop_guard_needed_to_prove_dereferenceable(i32 %x, i1 %cmp2) {
 ; CHECK-NEXT:    [[TMP4:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
 ; CHECK-NEXT:    br i1 [[TMP4]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP5]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[TMP0]], [[N_VEC]]
@@ -558,7 +558,7 @@ define i64 @loop_guards_needed_to_prove_deref_multiple(i32 %x, i1 %c, ptr derefe
 ; CHECK-NEXT:    [[TMP6:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP5]])
 ; CHECK-NEXT:    [[TMP7:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[IV_NEXT]]
 ; CHECK-NEXT:    br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[LOOP_LATCH]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[MIDDLE_BLOCK:%.*]], label [[LOOP_HEADER]], !llvm.loop [[LOOP11:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i64 [[TMP2]], [[IV_NEXT]]
diff --git a/llvm/test/Transforms/LoopVectorize/single_early_exit_live_outs.ll b/llvm/test/Transforms/LoopVectorize/single_early_exit_live_outs.ll
index 38f00ce89a126..0268225092023 100644
--- a/llvm/test/Transforms/LoopVectorize/single_early_exit_live_outs.ll
+++ b/llvm/test/Transforms/LoopVectorize/single_early_exit_live_outs.ll
@@ -26,7 +26,7 @@ define i64 @same_exit_block_pre_inc_use1() {
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -89,7 +89,7 @@ define i32 @same_exit_block_pre_inc_use1_iv64_endi32_step2() {
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -152,7 +152,7 @@ define i32 @same_exit_block_pre_inc_use1_iv128_endi32_step2() {
 ; CHECK-NEXT:    [[TMP5:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP1]])
 ; CHECK-NEXT:    [[TMP6:%.*]] = icmp eq i128 [[INDEX_NEXT2]], 64
 ; CHECK-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -217,7 +217,7 @@ define float @same_exit_block_pre_inc_use1_iv64_endf32() {
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -284,7 +284,7 @@ define ptr @same_exit_block_pre_inc_use1_iv64_endptr() {
 ; CHECK-NEXT:    [[TMP16:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP17:%.*]] = icmp eq i64 [[INDEX_NEXT7]], 64
 ; CHECK-NEXT:    br i1 [[TMP16]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP17]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -346,7 +346,7 @@ define ptr @same_exit_block_pre_inc_use1_ivptr() {
 ; CHECK-NEXT:    [[TMP12:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP1]])
 ; CHECK-NEXT:    [[TMP13:%.*]] = icmp eq i64 [[INDEX_NEXT]], 1024
 ; CHECK-NEXT:    br i1 [[TMP12]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP13]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP7:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -408,7 +408,7 @@ define i64 @same_exit_block_pre_inc1_use_inv_cond(i1 %cond) {
 ; CHECK-NEXT:    [[TMP8:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP12]])
 ; CHECK-NEXT:    [[TMP9:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP9]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -472,7 +472,7 @@ define i64 @same_exit_block_pre_inc_use1_gep_two_indices() {
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -535,7 +535,7 @@ define i64 @same_exit_block_pre_inc_use1_alloca_diff_type() {
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP10:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -598,7 +598,7 @@ define i64 @same_exit_block_pre_inc_use2() {
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP11:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -658,7 +658,7 @@ define i64 @same_exit_block_pre_inc_use3() {
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP12:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -722,7 +722,7 @@ define i64 @same_exit_block_pre_inc_use4() {
 ; CHECK-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT2]], 64
 ; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <4 x i64> [[VEC_IND]], splat (i64 4)
 ; CHECK-NEXT:    br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP6]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP13:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -783,7 +783,7 @@ define i64 @same_exit_block_post_inc_use() {
 ; CHECK-NEXT:    [[TMP14:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP15:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP14]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP15]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP14:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -842,7 +842,7 @@ define ptr @same_exit_block_post_inc_use1_ivptr() {
 ; CHECK-NEXT:    [[TMP16:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP1]])
 ; CHECK-NEXT:    [[TMP17:%.*]] = icmp eq i64 [[INDEX_NEXT]], 1024
 ; CHECK-NEXT:    br i1 [[TMP16]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP17]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP15:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -902,7 +902,7 @@ define i64 @same_exit_block_post_inc_use2() {
 ; CHECK-NEXT:    [[TMP18:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP19:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP18]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP19]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP16:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -966,7 +966,7 @@ define i64 @diff_exit_block_pre_inc_use1() {
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP17:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -1034,7 +1034,7 @@ define i64 @diff_exit_block_pre_inc_use2() {
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP18:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -1099,7 +1099,7 @@ define i64 @diff_exit_block_pre_inc_use3() {
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT4]], 64
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP19:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -1165,7 +1165,7 @@ define i64 @diff_exit_block_post_inc_use1() {
 ; CHECK-NEXT:    [[TMP14:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP15:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP14]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP15]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP20:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -1233,7 +1233,7 @@ define i64 @diff_exit_block_post_inc_use2() {
 ; CHECK-NEXT:    [[TMP18:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP19:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP18]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP19]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP21:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -1303,7 +1303,7 @@ define i64 @diff_exit_block_post_inc_use3(i64 %start) {
 ; CHECK-NEXT:    [[TMP20:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP21:%.*]] = icmp eq i64 [[INDEX_NEXT4]], 64
 ; CHECK-NEXT:    br i1 [[TMP20]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP21]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP22:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[IND_ESCAPE:%.*]] = sub i64 [[TMP0]], 1
@@ -1374,7 +1374,7 @@ define i64 @loop_contains_safe_call() {
 ; CHECK-NEXT:    [[TMP6:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP7:%.*]] = icmp eq i64 [[INDEX_NEXT2]], 64
 ; CHECK-NEXT:    br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP23:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -1435,7 +1435,7 @@ define i64 @loop_contains_safe_div() {
 ; CHECK-NEXT:    [[TMP6:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP7:%.*]] = icmp eq i64 [[INDEX_NEXT2]], 64
 ; CHECK-NEXT:    br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP24:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
@@ -1496,7 +1496,7 @@ define i64 @loop_contains_load_after_early_exit(ptr dereferenceable(1024) align(
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP3]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP25:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    [[TMP9:%.*]] = extractelement <4 x i64> [[WIDE_LOAD2]], i32 3
@@ -1564,7 +1564,7 @@ define i64 @same_exit_block_pre_inc_use1_reverse() {
 ; CHECK-NEXT:    [[TMP9:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP7]])
 ; CHECK-NEXT:    [[TMP10:%.*]] = icmp eq i64 [[INDEX_NEXT4]], 1020
 ; CHECK-NEXT:    br i1 [[TMP9]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP10]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP26:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[SCALAR_PH:%.*]]
@@ -1688,7 +1688,7 @@ define i64 @same_exit_block_pre_inc_use1_deref_ptrs(ptr dereferenceable(1024) %p
 ; CHECK-NEXT:    [[TMP7:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP4]])
 ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
 ; CHECK-NEXT:    br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK]]
-; CHECK:       vector.body.multi.cond.1:
+; CHECK:       vector.body.cond.1:
 ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK1:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP28:![0-9]+]]
 ; CHECK:       middle.block:
 ; CHECK-NEXT:    br label [[LOOP_END:%.*]]
diff --git a/llvm/test/Transforms/LoopVectorize/single_early_exit_with_outer_loop.ll b/llvm/test/Transforms/LoopVectorize/single_early_exit_with_outer_loop.ll
index babc483f41386..c833c80a10680 100644
--- a/llvm/test/Transforms/LoopVectorize/single_early_exit_with_outer_loop.ll
+++ b/llvm/test/Transforms/LoopVectorize/single_early_exit_with_outer_loop.ll
@@ -6,7 +6,7 @@ declare void @init_mem(ptr, i64);
 ; uncountable early exits are correctly added to the outer loop at depth 1.
 define void @early_exit_in_outer_loop1() {
 ; CHECK-LABEL: Loop info for function 'early_exit_in_outer_loop1':
-; CHECK: Loop at depth 1 containing: %loop.outer<header>,%loop.inner.found,%loop.inner.end<latch>,%loop.inner.end.loopexit,%vector.ph,%vector.body,%vector.body.multi.cond.1,%middle.block,%vector.early.exit
+; CHECK: Loop at depth 1 containing: %loop.outer<header>,%loop.inner.found,%loop.inner.end<latch>,%loop.inner.end.loopexit,%vector.ph,%vector.body,%vector.body.cond.1,%middle.block,%vector.early.exit
 entry:
   %p1 = alloca [1024 x i8]
   %p2 = alloca [1024 x i8]
@@ -45,8 +45,8 @@ loop.inner.end:
 ; loops at depths 1 and 2, respectively.
 define void @early_exit_in_outer_loop2() {
 ; CHECK-LABEL: Loop info for function 'early_exit_in_outer_loop2':
-; CHECK: Loop at depth 1 containing: %loop.outer<header>,%loop.middle,%loop.inner.found,%loop.inner.end,%loop.middle.end,%loop.outer.latch<latch>,%vector.ph,%vector.body,%vector.body.multi.cond.1,%middle.block,%vector.early.exit
-; CHECK:    Loop at depth 2 containing: %loop.middle<header>,%loop.inner.end<latch><exiting>,%vector.ph,%vector.body<exiting>,%vector.body.multi.cond.1,%middle.block
+; CHECK: Loop at depth 1 containing: %loop.outer<header>,%loop.middle,%loop.inner.found,%loop.inner.end,%loop.middle.end,%loop.outer.latch<latch>,%vector.ph,%vector.body,%vector.body.cond.1,%middle.block,%vector.early.exit
+; CHECK:    Loop at depth 2 containing: %loop.middle<header>,%loop.inner.end<latch><exiting>,%vector.ph,%vector.body<exiting>,%vector.body.cond.1,%middle.block
 entry:
   %p1 = alloca [1024 x i8]
   %p2 = alloca [1024 x i8]
@@ -92,8 +92,8 @@ loop.outer.latch:
 
 define i32 @early_exit_branch_to_outer_header() {
 ; CHECK-LABEL: Loop info for function 'early_exit_branch_to_outer_header':
-; CHECK-NEXT:  Loop at depth 1 containing: %outer.header<header>,%outer.header.loopexit<latch>,%vector.ph,%vector.body,%vector.body.multi.cond.1<exiting>,%vector.early.exit
-; CHECK-NEXT:    Loop at depth 2 containing: %vector.body<header><exiting>,%vector.body.multi.cond.1<latch><exiting>
+; CHECK-NEXT:  Loop at depth 1 containing: %outer.header<header>,%outer.header.loopexit<latch>,%vector.ph,%vector.body,%vector.body.cond.1<exiting>,%vector.early.exit
+; CHECK-NEXT:    Loop at depth 2 containing: %vector.body<header><exiting>,%vector.body.cond.1<latch><exiting>
 entry:
   %src = alloca [1024 x i8]
   call void @init_mem(ptr %src, i64 1024)
diff --git a/llvm/test/Transforms/LoopVectorize/uncountable-early-exit-vplan.ll b/llvm/test/Transforms/LoopVectorize/uncountable-early-exit-vplan.ll
index 3ded8b6ee6c40..fc48f7a6a51ea 100644
--- a/llvm/test/Transforms/LoopVectorize/uncountable-early-exit-vplan.ll
+++ b/llvm/test/Transforms/LoopVectorize/uncountable-early-exit-vplan.ll
@@ -31,7 +31,7 @@ define i64 @multi_exiting_to_different_exits_live_in_exit_values() {
 ; CHECK-NEXT:     EMIT vp<%index.next> = add nuw vp<[[CAN_IV]]>, vp<[[VFxUF]]>
 ; CHECK-NEXT:     EMIT vp<[[EA_TAKEN:%.+]]> = any-of ir<%c.1>
 ; CHECK-NEXT:     EMIT vp<[[LATCH_CMP:%.+]]> = icmp eq vp<%index.next>, vp<[[VTC]]>
-; CHECK-NEXT:     EMIT branch-on-multi-cond vp<[[EA_TAKEN]]>, vp<[[LATCH_CMP]]>
+; CHECK-NEXT:     EMIT branch-on-two-conds vp<[[EA_TAKEN]]>, vp<[[LATCH_CMP]]>
 ; CHECK-NEXT:   No successors
 ; CHECK-NEXT: }
 ; CHECK-NEXT: Successor(s): vector.early.exit, middle.block
@@ -113,7 +113,7 @@ define i64 @multi_exiting_to_same_exit_live_in_exit_values() {
 ; CHECK-NEXT:     EMIT vp<%index.next> = add nuw vp<[[CAN_IV]]>, vp<[[VFxUF]]>
 ; CHECK-NEXT:     EMIT vp<[[EA_TAKEN:%.+]]> = any-of ir<%c.1>
 ; CHECK-NEXT:     EMIT vp<[[LATCH_CMP:%.+]]> = icmp eq vp<%index.next>, vp<[[VTC]]>
-; CHECK-NEXT:     EMIT branch-on-multi-cond vp<[[EA_TAKEN]]>, vp<[[LATCH_CMP]]>
+; CHECK-NEXT:     EMIT branch-on-two-conds vp<[[EA_TAKEN]]>, vp<[[LATCH_CMP]]>
 ; CHECK-NEXT:   No successors
 ; CHECK-NEXT: }
 ; CHECK-NEXT: Successor(s): vector.early.exit, middle.block
@@ -188,7 +188,7 @@ define i64 @multi_exiting_to_same_exit_live_in_exit_values_2() {
 ; CHECK-NEXT:     EMIT vp<%index.next> = add nuw vp<[[CAN_IV]]>, vp<[[VFxUF]]>
 ; CHECK-NEXT:     EMIT vp<[[EA_TAKEN:%.+]]> = any-of ir<%c.1>
 ; CHECK-NEXT:     EMIT vp<[[LATCH_CMP:%.+]]> = icmp eq vp<%index.next>, vp<[[VTC]]>
-; CHECK-NEXT:     EMIT branch-on-multi-cond vp<[[EA_TAKEN]]>, vp<[[LATCH_CMP]]>
+; CHECK-NEXT:     EMIT branch-on-two-conds vp<[[EA_TAKEN]]>, vp<[[LATCH_CMP]]>
 ; CHECK-NEXT:   No successors
 ; CHECK-NEXT: }
 ; CHECK-NEXT: Successor(s): vector.early.exit, middle.block



More information about the llvm-commits mailing list