 _generateKeyMap(Map<String, int> letterFrequencies, int rotation, int multiplier) {
  var keyMap = <String, List<int>>{};

  var counter = rotation * multiplier;

  letterFrequencies.forEach((letter, frequency) {
    keyMap.addAll({letter: <int>[]});
    for (int f = 0; f < frequency; f++) {
      keyMap[letter]!.add(counter % 100);
      counter += multiplier;
    }
  });

  return keyMap;
}

HomophoneOutput encryptHomophoneWithGeneratedKey(String input, Alphabet alphabet, int rotation, int multiplier) {
  var letterFrequencies = getLetterFrequenciesFromAlphabet(alphabet);

  return _encryptHomophone(input, _generateKeyMap(letterFrequencies, rotation, multiplier));
}

HomophoneOutput _encryptHomophone(String input, Map<String, List<int>> keyMap) {
  if (input.isEmpty) return HomophoneOutput('', '', HomophoneErrorCode.OK);

  var error = HomophoneErrorCode.OK;
  if (_checkDoubleKey(keyMap)) {
    error = HomophoneErrorCode.CUSTOM_KEY_DUPLICATE;
  }

  input = input.toUpperCase();
  input = input.split('').map((character) => keyMap.containsKey(character) ? character : '').join();

  var output = input
      .toUpperCase()
      .split('')
      .map((character) => _charToNumber(character, keyMap).toString().padLeft(2, '0'))
      .join(' ');

  return HomophoneOutput(output, _keyMapToString(keyMap), error);
}

HomophoneOutput decryptHomophoneWithKeyMap(String input, Map<String, List<int>>? keyMap) {
  if (keyMap == null || keyMap.isEmpty) {
    return HomophoneOutput('', '', HomophoneErrorCode.CUSTOM_KEY_COUNT);
  }

  return _decryptHomophone(input, keyMap);
}

HomophoneOutput decryptHomophoneWithKeyList(String input, Alphabet alphabet, List<int>? keyList) {
  if (keyList == null || keyList.length != 100) {
    return HomophoneOutput('', '', HomophoneErrorCode.CUSTOM_KEY_COUNT);
  }

  var letterFrequencies = getLetterFrequenciesFromAlphabet(alphabet);

  var keyMap = _keyListToKeyMap(letterFrequencies, keyList);

  return _decryptHomophone(input, keyMap);
}

HomophoneOutput decryptHomophoneWithGeneratedKey(String input, Alphabet alphabet, int rotation, int multiplier) {
  var letterFrequencies = getLetterFrequenciesFromAlphabet(alphabet);

  return _decryptHomophone(input, _generateKeyMap(letterFrequencies, rotation, multiplier));
}

HomophoneOutput _decryptHomophone(String input, Map<String, List<int>> keyMap) {
  if (input.isEmpty) return HomophoneOutput('', '', HomophoneErrorCode.OK);

  var error = HomophoneErrorCode.OK;
  if (_checkDoubleKey(keyMap)) {
    error = HomophoneErrorCode.CUSTOM_KEY_DUPLICATE;
  }

  var output = input.split(' ').map((number) {
    return _numberToChar(number, keyMap);
  }).join();

  return HomophoneOutput(output, _keyMapToString(keyMap), error);
}

List<int> getMultipliers() {
  var multipliers = <int>[];

  for (int i = 1; i <= 99; i += 2) {
    multipliers.add(i);
  }

  for (int i = 5; i < 99; i += 10) {
    multipliers.remove(i);
  }

  return multipliers;
}

bool _checkDoubleKey(Map<String, List<int>> table) {
  var keyList = <int>[];
  for (var element in table.values) {
    keyList.addAll(element);
  }
  return (keyList.length


-width: 500px;
}

/* Layout  */
p.required
{
  display:none;
}

.tags .tag {
  margin-right: 4px;
}

*{
  box-sizing: border-box;
  text-shadow: none;
}

.tags_list_span
{

  padding: 2px;
  font-family: Courier;
  line-height: 21px;
  float: none !important;
  width: auto;
  margin: 5px;
}
#assignment-instructions{
  display: none;
}

body>#content, #content{
  margin: 0;
  background-image:  linear-gradient(#EEF5F8 110px,#EEF5F8 110px,#FFFFFF 110px);
  border: 0;
  padding: 0;
  margin-bottom: -155px;
}

.cml{
  border: 0;
  background: transparent;
  padding: 0;
  margin:0;
  overflow: hidden;
  padding-bottom: 2px;
}

/* Header  */

h1.job-title{
  margin: 0;
  padding-left: 55px;
  padding-bottom: 10px;
  padding-right: 15px;
  margin-bottom: 10px;
  background-color: #EEF5F8;
  font-size: 23px;
  color: #000;
  min-height: 65px;
  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAO3SURBVHgB7VtNbtNAGJ0j9AbkCL1BcwN6g+QG6Q3SG/gIPoJXJXUAWd0gwYJI7aILkMyCBSyQBQsWsBj8PCRxbM+MZ/yNPVP1SU/Qqhn7fX/zzU8Ye8ZIuOHnbMOXbMtXLOVrdsvjA/Ezfv+KX1Z/9ySw4fNSXFQyKwUW5b/ckLvq8xgnGGxL7+Gl7QSrmFeR4m10CG9nxKJlREQtmBfY8NmIwtuGwPMnFH/tINTNifcYWfiUXpfXiFGiAbnug9e7I6Eop9Er5gyYw30UPkpKYNAQxDsxQiied2IE0diEJbzOQf2CqPZ5MGK7o6Cwnx38m+psmbOEnxlpD67o6ZiW6xMD8TNv5/oh7L2qFGv0cIT1Z6YXLwpfSKKIo8Bz788/cJ584zz7wfnVo9UYWbDeh/gm4q+UUYA9OY8E1zm74zz/zTvx4s54vEgW/vmUIlVMvnMpLt4bR0DR7gtu/G15rz/LxSMqrMZtpYGn4Y/QV+Hyo/XYUTP8kykEqnj2Rp73wPrTgPHTcsv9BB52fqjw5KFf56EOZOV/Bg6GUIXHqMRjjpeh+CueN/g5hzMGsadvLRxNyR7w2lBDYEyIlGFxT2Pk415BWp7HWQ6y+9V+QavmpEZV3kc5kXjB1T4CrLa8zt7KX9SyTdVOeZRpVh


ata from the hotel’s proximity to nearby transit options |[optional]|
**airport_access** | **StrictFloat** | score relative to nearby airports
indicates the score of the hotel’s location in the range from 1 to 5;
calculated based on data from the hotel’s proximity to nearby airports |[optional]|# DataforseoLabsPageIntersectionLiveItem

## Properties

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**se_type** | **str** | search engine type | [optional]
**keyword_data** | [**KeywordDataInfo**](KeywordDataInfo.md) |  | [optional]
**intersection_result** | [**Dict[str, BaseDataforseoLabsSerpElementItem]**](BaseDataforseoLabsSerpElementItem.md) | contains data on the SERP elements found for the returned keyword data will be provided in separate arrays for each URL you specified in the pages object when setting a task; depending on the number of specified URLs, it can contain from 1 to 20 arrays named respectively | [optional]

## Example

```python
from dataforseo_client.models.dataforseo_labs_page_intersection_live_item import DataforseoLabsPageIntersectionLiveItem

# TODO update the JSON string below
json = "{}"
# create an instance of DataforseoLabsPageIntersectionLiveItem from a JSON string
dataforseo_labs_page_intersection_live_item_instance = DataforseoLabsPageIntersectionLiveItem.from_json(json)
# print the JSON string representation of the object
print(DataforseoLabsPageIntersectionLiveItem.to_json())

# convert the object into a dict
dataforseo_labs_page_intersection_live_item_dict = dataforseo_labs_page_intersection_live_item_instance.to_dict()
# create an instance of DataforseoLabsPageIntersectionLiveItem from a dict
dataforseo_labs_page_intersection_live_item_from_dict = DataforseoLabsPageIntersectionLiveItem.from_dict(dataforseo_labs_page_intersection_live_item_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

# DataforseoLabsRankedKeywordsLiveItem

## Properties

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**se_type** | **str** | search engine type | [optional]
**keyword_data** | [**KeywordDataKeywordDataInfo**](KeywordDataKeywordDataInfo.md) |  | [optional]
**ranked_serp_element** | [**RankedSerpElement**](RankedSerpElement.md) |  | [optional]

## Example

```python
from dataforseo_client.models.dataforseo_labs_ranked_keywords_live_item import DataforseoLabsRankedKeywordsLiveItem

# TODO update the JSON string below
json = "{}"
# create an instance of DataforseoLabsRankedKeywordsLiveItem from a JSON string
dataforseo_labs_ranked_keywords_live_item_instance = DataforseoLabsRankedKeywordsLiveItem.from_json(json)
# print the JSON string representation of the object
print DataforseoLabsRankedKeywordsLiveItem.to_json()

# convert the object into a dict
dataforseo_labs_ranked_keywords_live_item_dict = dataforseo_labs_ranked_keywords_live_item_instance.to_dict()
# create an instance of DataforseoLabsRankedKeywordsLiveItem from a dict
dataforseo_labs_ranked_keywords_live_item_form_dict = dataforseo_labs_ranked_keywords_live_item.from_dict(dataforseo_labs_ranked_keywords_live_item_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

# DataforseoLabsAppleKeywordsForAppLiveRequestInfo

## Properties

|


_in_type \
           {}ty: {} scope: {:?}",
           (0..depth).map(|_| ' ').collect::<String>(),
           ty, cx.parent_scope);

    // If `typ` has a destructor, then we must ensure that all
    // borrowed data reachable via `typ` must outlive the parent
    // of `scope`. This is handled below.
    //
    // However, there is an important special case: for any Drop
    // impl that is tagged as "blind" to their parameters,
    // we assume that data borrowed via such type parameters
    // remains unreachable via that Drop impl.
    //
    // For example, consider:
    //
    // ```rust
    // #[unsafe_destructor_blind_to_params]
    // impl<T> Drop for Vec<T> { ... }
    // ```
    //
    // which does have to be able to drop instances of `T`, but
    // otherwise cannot read data from `T`.
    //
    // Of course, for the type expression passed in for any such
    // unbounded type parameter `T`, we must resume the recursive
    // analysis on `T` (since it would be ignored by
    // type_must_outlive).
    let dropck_kind = has_dtor_of_interest(tcx, ty);
    debug!("iterate_over_potentially_unsafe_regions_in_type \
            ty: {:?} dropck_kind: {:?}", ty, dropck_kind);
    match dropck_kind {
        DropckKind::NoBorrowedDataAccessedInMyDtor => {
            // The maximally blind attribute.
        }
        DropckKind::BorrowedDataMustStrictlyOutliveSelf => {
            cx.rcx.type_must_outlive(infer::SubregionOrigin::SafeDestructor(cx.span),
                                     ty, tcx.mk_region(ty::ReScope(cx.parent_scope)));
            return Ok(());
        }
        DropckKind::RevisedSelf(revised_ty) => {
            cx.rcx.type_must_outlive(infer::SubregionOrigin::SafeDestructor(cx.span),
                                     revised_ty, tcx.mk_region(ty::ReScope(cx.parent_scope)));
            // Do not return early from this case; we want
            // to recursively process the internal structure of Self
            // (because even though the Drop for Self has been asserted
            //  safe, the types instantiated for the generics of Self
            //  may themselves carry dropck constraints.)
        }
    }

    debug!("iterate_over_potentially_unsafe_regions_in_type \
           {}ty: {} scope: {:?} - checking interior",
           (0..depth).map(|_| ' ').collect::<String>(),
           ty, cx.parent_scope);

    // We still need to ensure all referenced data is safe.
    match ty.sty {
        ty::TyBool | ty::TyChar | ty::TyInt(_) | ty::TyUint(_) |
        ty::TyFloat(_) | ty::TyStr | ty::TyNever => {
            // primitive - definitely safe
            Ok(())
        }

        ty::TyBox(ity) | ty::TyArray(ity, _) | ty::TySlice(ity) => {
            // single-element containers, behave like their element
            iterate_over_potentially_unsafe_regions_in_type(
                cx, context, ity, depth+1)
        }

        ty::TyAdt(def, substs) if def.is_phantom_data() => {
            // PhantomData<T> - behaves identically to T
            let ity = substs.type_at(0);
            iterate_over_potentially_unsafe_regions_in_type(
                cx, context, ity, depth+1)
        }

        ty::TyAdt(def, substs) => {
            let did = def.did;
            for variant in &def.variants {
                for field in variant.fields.iter() {
                    let fty = field.ty(tcx, substs);
                    let fty = cx.rcx.fcx.resolve_type_vars_


"Guardahombros de placas de magma",
[65189] = "Mandiletes de jinete de la tormenta",
[65190] = "Celada de jinete de la tormenta",
[65191] = "Musleras de jinete de la tormenta",
[65192] = "Vestiduras de jinete de la tormenta",
[65193] = "Bufas de jinete de la tormenta",
[65194] = "Manijas de jinete de la tormenta",
[65195] = "Yelmo de jinete de la tormenta",
[65196] = "Ataduras de jinete de la tormenta",
[65197] = "Togas de jinete de la tormenta",
[65198] = "Manto de jinete de la tormenta",
[65199] = "Guantes de jinete de la tormenta",
[65200] = "Casquete de jinete de la tormenta",
[65201] = "Leotardos de jinete de la tormenta",
[65202] = "Vestimentas de jinete de la tormenta",
[65203] = "Jinetas de jinete de la tormenta",
[65204] = "Guerrera cargada de relámpago",
[65205] = "Guantes cargados de relámpago",
[65206] = "Protegecabezas cargado de relámpago",
[65207] = "Musleras cargadas de relámpago",
[65208] = "Bufas cargadas de relámpago",
[65209] = "Guantes del Señor del Fuego",
[65210] = "Caperuza del Señor del Fuego",
[65211] = "Leotardos del Señor del Fuego",
[65212] = "Togas del Señor del Fuego",
[65213] = "Manto del Señor del Fuego",
[65214] = "Placa de batalla de zafirium reforzado",
[65215] = "Guanteletes de zafirium reforzado",
[65216] = "Casco de zafirium reforzado",
[65217] = "Quijotes de zafirium reforzado",
[65218] = "Espaldares de zafirium reforzado",
[65219] = "Coraza de zafirium reforzado",
[65220] = "Guantes de zafirium reforzado",
[65221] = "Protegecabezas de zafirium reforzado",
[65222] = "Grebas de zafirium reforzado",
[65223] = "Manto de zafirium reforzado",
[65224] = "Coselete de zafirium reforzado",
[65225] = "Manoplas de zafirium reforzado",
[65226] = "Visera de zafirium reforzado",
[65227] = "Musleras de zafirium reforzado",
[65228] = "Guardahombros de zafirium reforzado",
[65229] = "Manijas mercúricas",
[65230] = "Capucha mercúrica",
[65231] = "Ataduras mercúricas",
[65232] = "Togas mercúricas",
[65233] = "Manto mercúrico",
[65234] = "Guantes mercúricos",
[65235] = "Caperuza mercúrica",
[65236] = "Leotardos mercúricos",
[65237] = "Vestimentas mercúricas",
[65238] = "Jinetas mercúricas",
[65239] = "Guerrera de Bailavientos",
[65240] = "Guantes de Bailavientos",
[65241] = "Casco de Bailavientos",
[65242] = "Musleras de Bailavientos",
[65243] = "Bufas de Bailavientos",
[65244]


local PLUGIN = PLUGIN

function SWEP:Think()
  local owner = self:GetOwner()

  local stop = self:RunHook("Hook_PreThink")
  if stop then return end

  local cfm = self:GetCurrentFiremode()
  if self:GetValue("RunawayBurst") and cfm < 0 then
    if self:GetBurstCount() >= -cfm then
      self:SetBurstCount(0)
      self:SetNextPrimaryFire(CurTime() + self:GetValue("PostBurstDelay"))
    elseif self:GetBurstCount() > 0 and self:GetBurstCount() < -cfm then
      self:PrimaryAttack()
    end
  else
    if (owner:KeyReleased(IN_ATTACK) or (cfm < 0 and self:GetBurstCount() >= -cfm)) then
      if cfm < 0 and self:GetBurstCount() > 1 then
        if not self:GetValue("AutoBurst") then
          self.Primary.Automatic = false
        end
        local add = 0
        if self:GetBurstCount() >= -cfm then
          add = 60 / self:GetValue("RPM")
        end
        self:SetNextPrimaryFire(CurTime() + self:GetValue("PostBurstDelay") + add)
      end
      self:SetBurstCount(0)
    end
  end

  if self:GetPatternCount() > 0 and (self:GetRecoilAmount() == 0 or self:GetReloading()) then
    self:SetPatternCount(0)
  end

  self:ThinkRecoil()

  self:ThinkSprint()

  self:ThinkGrenade()

  self:ThinkReload()

  self:ThinkSights()

  self:ThinkFreeAim()

  self:ThinkBlindFire()

  self:ProcessTimers()

  self:ThinkHoldBreath()

  if self:GetValue("Melee") and self:GetOwner():KeyPressed(PLUGIN.IN_MELEE) then
    self:Melee()
    return
  end

  if IsValid(self:GetOwner()) and self:GetOwner():IsPlayer() and self:GetValue("TacticalThink") and self:GetTactical() then
    self:GetValue("TacticalThink")(self)
  end

  -- if IsValid(self:GetOwner()) and s


.material.icons.outlined.ThumbUp
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.constraintlayout.compose.ConstraintLayout
import androidx.constraintlayout.compose.Dimension
import coil3.compose.AsyncImage
import org.jetbrains.compose.resources.painterResource
import top.suzhelan.bili.comment.entity.Comment
import top.suzhelan.bili.comment.ui.text.CompoundEmojiMessage
import top.suzhelan.bili.comment.ui.text.CompoundEmojiMessageModel
import top.suzhelan.bili.shared.common.ui.icons.LevelIcons
import top.suzhelan.bili.shared.common.ui.theme.ColorPrimary
import top.suzhelan.bili.shared.common.ui.theme.TextColor
import top.suzhelan.bili.shared.common.ui.theme.TipColor
import top.suzhelan.bili.shared.common.util.toStringCount

@Composable
fun CommentCard(comment: Comment) {

    //构成 头像,头像框背景
    //昵称 等级 评论背景
    //评论内容
    //时间 ip ‘回复’ 点赞 点踩 更多操作
    //被回复预览
    ConstraintLayout(modifier = Modifier.fillMaxWidth().padding(0.dp)) {
        val (avatar, nickname, level, background, content, infoLine, repliedPreview) = createRefs()

        //背景
        AsyncImage(
            model = comment.member.userSailing?.cardBg?.image,
//            model = "https://i0.hdslb.com/bfs/garb/item/b96c1df81ca32fc79165c94c4da1f7dd404f42d3.png",//示例背景
            contentDescription = "Avatar",
            alignment = Alignment.CenterEnd,
            modifier = Modifier
                .height(80.dp)
                .fillMaxWidth()
                .constrainAs(background) {
                    top.linkTo(parent.bottom)
                    end.linkTo(parent.end)
                }
        )

        //头像
        Avatar(member = comment.member, modifier = Modifier.constrainAs(avatar) {
            top.linkTo(parent.top, 8.dp)
            start.linkTo(parent.start, 8.dp)
        })

        //昵称
        Text(
            text = comment.member.uname,
            fontSize = 14.sp,
            modifier = Modifier.constrainAs(nickname) {
                top.linkTo(avatar.top, 8.dp)
                start.linkTo(avatar.end)
            })

        //等级
        Image(
            painter = painterResource(
                LevelIcons.levelIconMap.getValue(comment.member.levelInfo.currentLevel)
            ),
            contentDescription = "lv${comment.member.levelInfo.currentLevel}",
            modifier = Modifier
                .height(15.dp)
                .padding(start = 10.dp)
                .constrainAs(level) {
                    top.linkTo(nickname.top)
                    bottom.linkTo(nickname.bottom)
                    start.linkTo(nickname.end)
                },
        )

        //复合消息卡片
        CompoundEmojiMessage(
            content = CompoundEmojiMessageModel.MessageContent(
                comment.content.message,
                comment.content.emote
            ),
            modifier = Modifier.constrainAs(content) {
                top.linkTo(nickname.bottom)
                start.linkTo(nickname.start)


FFFFABXzj8XfjL8SvCHxc0TwD8JfgRrvxg8TXelSape3NzrS6Fo9hbq/lhWvpYZEe4ZukKKWC/MxUYr6Or4R/bB+N3xZ8Jat4e+FPwm+H/AMW5J/EUO/xD8RfDngK/12Dw3ZEsrC2S2iZZb9tp2KxCx5Vm6jGVVtOKW7f36Pr0XVvsrdTSmk1Jvovu1XRbvovNlay/blh8TfBb4WT+BPhRq/iL4w+OfEOo6DZ+AbvXIbNbG600t/aL3F9sdBBCACJFjYvvUBQSce6fAP47N8ZLbx7ouv8Ag65+HXxI8D67/Y/izw1NqSX62srRiWKWK5RUE0MiNuV9ing5Ud/hqDwVZfDDXf2RvjL8H/g/8b9S+Gvw7bXtC8T6Hf8AhC7TxSRqMS7tUaxlRZ5y04LOyKch8qMDj6N/ZP8ADPizUPj/APtLfHrxN4P8R+AbH4k+JrE+HtE8Q2Zs9SWw0+0FslxcW7fNC0rF2CPhgAMjkZ64xi3K/ZvtZqUVFLraUW5K93q9fdZzTk0o27q3W69+9+icWknbTRP7aPtuiiisTUKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPI/i545+IvgvQdET4ZfB/Uvi94i1O8MH2Vddt9JsrBFQu01zcyhyinGFCROWbjA4z8xW/7c0cP7OfijWtd+Ems6d8W9I+Isfw+h8A2euw3aajrcoVoYoNQCLGYirbmkKAoFbKnjPr37TmseHYvhno3hnxx8IvjX8T/A2s3ZGpz/DdLyS60x4trxGVLCeK8MbnIzEGX5cPwRn80fDnwZ+K+i/B2Lxx8P8A4T/FCx+EPw++PeneMfAnw98Q2DL4ml0pYHj1N1hlbz3ZpJfMijlYysEbqSMzQtKbU3aN469k500/T3XJ6p6e9eysVWvGCcVeVnp3ahNpfOSitGu27ufpf8Gv2gdb8e/H7xz8IPiV8Nz8KPit4Z0+21WTSYdfTWLS/wBPuCyx3MFysUW4B1KOrRqVbHXt9NV8G/BOx8UfFH/gqt8R/wBo668AeOvh54Gh8A2Xg7w/D4x0WTStR1OVbp7u4n+yygSpEpKorOBu5Izg4+8q1a/dwbVm07r5tL742k/N9Nlkn+8mk7pWs/8At1N/dJtfIKKKKgsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//Z" width="450px" />

</slide><slide class="segue dark nobackground level1"><hgroup class = 'auto-fadein'>
ANOVA de un factor
</hgroup>

</slide><slide class=""><hgroup>
Clasificación simple, efectos fijos, diseño completamente aleatorio
</hgroup>

Supongamos que estamos en los casos siguientes:

usamos un solo factor para clasificar la población en subpoblaciones (clasificación simple),

el investigador decide qué niveles (o tratamientos) del factor usará (efectos fijos),


Array, drawRect } from './utils.js'

class House implements Object1 {
  type = 'House'
  capacity = 9
  drawSettings = {
    itemSize: 10,
    distanceBetweenItems: 5,
    outerBorder: 10,
  }
  store: Object1[]
  id!: string
  log!: LoggingFunction
  pos: Pos
  world: World

  constructor(pos: Pos, world: World) {
    this.pos = pos
    this.world = world
    this.store = []
  }

  _getItemsPerRow() {
    return Math.sqrt(this.capacity)
  }

  _getSize() {
    const itemsPerRow = this._getItemsPerRow()
    const itemsWidth = itemsPerRow * this.drawSettings.itemSize
    const distanceBetweenItemsWidth =
      (itemsPerRow - 1) * this.drawSettings.distanceBetweenItems
    const outerBorderWidth = this.drawSettings.outerBorder * 2
    return itemsWidth + distanceBetweenItemsWidth + outerBorderWidth
  }

  _getItemCenter(storeCenter: number, index: number) {
    const size = this._getSize()
    const storeStart = storeCenter - size / 2
    return (
      storeStart +
      this.drawSettings.outerBorder +
      index *
        (this.drawSettings.itemSize + this.drawSettings.distanceBetweenItems) +
      this.drawSettings.itemSize / 2
    )
  }

  draw(ctx: CanvasRenderingContext2D) {
    const itemsPerRow = this._getItemsPerRow()
    const size = this._getSize()
    drawRect(ctx, this.pos, 'black', size)

    const rows = chunkArray(this.store, itemsPerRow)
    rows.forEach((row, i) => {
      const y = this._getItemCenter(this.pos.y, i)
      row.forEach((obj, i) => {
        const x = this._getItemCenter(this.pos.x, i)
        obj.pos.x = x
        obj.pos.y = y
        obj.draw(ctx)
      })
    })
  }

  addToStore(obj: Object1) {
    this.log(`Add ${obj} to store`)
    this.store.push(obj)
    const isFull = this.store.length === this.capacity
    if (isFull) {
      this.world.add(new Person(this.pos.clone(), this.world))
      this.store = []
      return false
    }

    return isFull
  }

  takeFromStore() {
    const obj = this.store.shift()
    this.log(`Remove ${obj} from store`)
    return obj
  }

  getHitbox() {
    const halfSize = this._getSize() / 2
    const h: Hitbox = {
      x: [this.pos.x - halfSize, this.pos.x + halfSize],
      y: [this.pos.y - halfSize, this.pos.y + halfSize],
    }
    return h
  }

  debugInfo() {
    return {
      id: this.id,
      store: this.store.map((obj) => obj.debugInfo()).join(', '),
    }
  }

  toString() {
    return `${this.type} (${this.id})`
  }
}

export default House
'use strict';

import {configure, MiddlewareConfig, logRequests} from '../lib/middleware';
import mw from '../lib/middleware';
import * as utils from '../lib';

describe('Middleware', () => {
  let req, res, logger;

  function use(register) {
    register(req, res, jest.fn());
  }

  beforeEach(() => {
    req = {xhr: true, headers: {}, url: '/test'};
    res = {
      json: jest.fn().mockReturnThis(),
      status: jest.fn().mockReturnThis(),
      render: jest.fn().mockReturnThis(),
    };
    logger = {
      log: jest.fn(),
      error: jest.fn(),
      warn: jest.fn()
    };
  });

  describe('Stab


/*
 * This file is subject to the terms of the GFX License. If a copy of
 * the license was not distributed with this file, you can obtain one at:
 *
 *              http://ugfx.org/license.html
 */

#ifndef _GOS_OSX_H
#define _GOS_OSX_H

#if GFX_USE_OS_OSX

#include <sys/types.h>
#include <stdint.h>
#include <pthread.h>
#include <stdlib.h>

/* Already defined int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, size_t */

typedef int8_t				bool_t;
typedef unsigned long		systemticks_t;
typedef void *				threadreturn_t;
typedef unsigned long		delaytime_t;
typedef pthread_t 			gfxThreadHandle;
typedef int					threadpriority_t;
typedef uint32_t			semcount_t;
typedef pthread_mutex_t		gfxMutex;

#define DECLARE_THREAD_FUNCTION(fnName, param)	threadreturn_t fnName(void *param)
#define DECLARE_THREAD_STACK(name, sz)			uint8_t name[0];
#define THREAD_RETURN(retval)					return retval

#define gfxExit()						exit(0)
#define gfxAlloc(sz)					malloc(sz)
#define gfxRealloc(p,osz,nsz)			realloc(p, nsz)
#define gfxFree(ptr)					free(ptr)
#define gfxMillisecondsToTicks(ms)		(ms)
#define gfxYield()						sched_yield()
#define gfxThreadMe()					pthread_self()
#define gfxThreadClose(th)				(void)th
#define gfxMutexInit(pmtx)				pthread_mutex_init(pmtx, 0)
#define gfxMutexDestroy(pmtx)			pthread_mutex_destroy(pmtx)
#define gfxMutexEnter(pmtx)				pthread_mutex_lock(pmtx)
#define gfxMutexExit(pmtx)				pthread_mutex_unlock(pmtx)
#define gfxSemWaitI(psem)				gfxSemWait(psem, TIME_IMMEDIATE)
#define gfxSemSignalI(psem)				gfxSemSignal(psem)

#define TIME_IMMEDIATE				0
#define TIME_INFINITE				((delaytime_t)-1)
#define MAX_SEMAPHORE_COUNT			((semcount_t)-1)
#define LOW_PRIORITY				10
#define NORMAL_PRIORITY				0
#define HIGH_PRIORITY				-10

typedef struct gfxSem {
	pthread_mutex_t	mtx;
	pthread_cond_t	cond;
	semcount_t		cnt;
	semcount_t		max;
} gfxSem;

/*===========================================================================*/
/* Function declarations.                                                    */
/*===========================================================================*/

#ifdef __cplusplus
extern "C" {
#endif

void gfxHalt(const char *msg);
void gfxSleepMilliseconds(delaytime_t ms);
void gfxSleepMicroseconds(delaytime_t ms);
systemticks_t gfxSystemTicks(void);
void gfxSystemLock(void);
void gfxSystemUnlock(void);
void gfxSemInit(gfxSem *psem, semcount_t val, semcount_t limit);
void gfxSemDestroy(gfxSem *psem);
bool_t gfxSemWait(gfxSem *psem, delaytime_t ms);
void gfxSemSignal(gfxSem *psem);
gfxThreadHandle gfxThreadCreate(void *stackarea, size_t stacksz, threadpriority_t prio, DECLARE_THREAD_FUNCTION((*fn),p), void *param);
threadreturn_t gfxThreadWait(gfxThreadHandle thread);

#ifdef __cplusplus
}
#endif

#endif /* GFX_USE_OS_OSX */
#endif /* _GOS_OSX_H */


https://twitter.com/ChristinaPushaw/status/1386830958326915074): Looks like it. I found it on FB in a Stanford group
* [26 April 2021](https://web.archive.org/web/20210426234914/https://twitter.com/ChristinaPushaw/status/1386829681379454976): It’s not a “Republican recall.” https://twitter.com/gavinnewsom/status/1386821747169652737
* [26 April 2021](https://web.archive.org/web/20210426234540/https://twitter.com/ChristinaPushaw/status/1386828683231604737): CREEEEEEPY
* [26 April 2021](https://web.archive.org/web/20210426234151/https://twitter.com/ChristinaPushaw/status/1386827800968146944): Right?! The beach is probably the safest place to be.
* [26 April 2021](https://web.archive.org/web/20210426234051/https://twitter.com/ChristinaPushaw/status/1386827583392714752): Agree
* [26 April 2021](https://web.archive.org/web/20210426234015/https://twitter.com/ChristinaPushaw/status/1386827430250360832): History BA from Stanford 🌚
* [26 April 2021](https://web.archive.org/web/20210426233936/https://twitter.com/ChristinaPushaw/status/1386827297014091776): Following the science by telling people to get off the beach and go inside, because Covid spreads indoors much more efficiently than it spreads at the beach... OH WAIT
* [26 April 2021](https://web.archive.org/web/20210426233528/https://twitter.com/ChristinaPushaw/status/1386826223280607236): Stanford-educated 🤡 pic.twitter.com/HMGOPCnenU
* [26 April 2021](https://web.archive.org/web/20210426233004/https://twitter.com/ChristinaPushaw/status/1386824872802897922): Lol I hadn’t noticed that before 🤣
* [26 April 2021](https://web.archive.org/web/20210426232155/https://twitter.com/ChristinaPushaw/status/1386822823495274497): If there was ever a perfect mascot for People Whining About Ron DeSantis, it’s the Grift Reaper  @DWUhlfelderLaw  https://twitter.com/desantisandco/status/1386819881471930371
* [26 April 2021](https://web.archive.org/web/20210426231523/https://twitter.com/ChristinaPushaw/status/1386821040291123201): ❤❤❤
* [26 April 2021](https://web.archive.org/web/20210426222644/https://twitter.com/ChristinaPushaw/status/1386808852130189313): Stop giving him attention. Negative or positive attention, narcissists thrive off it pic.twitter.com/RJislSkORD
* [26 April 2021](https://web.archive.org/web/20210426222014/https://twitter.com/ChristinaPushaw/status/1386807166657605633): Read the whole thread 🪡 https://twitter.com/someanonymity/status/1386793206763991049
* [26 April 2021](https://web.archive.org/web/20210426221409/https://twitter.com/ChristinaPushaw/status/1386805773087526912): This! It’s disgusting. Stop filming random people to humiliate them for social media clout. https://twitter.com/southernkeeks/status/1386799928756908035
* [26 April 2021](https://web.archive.org/web/20210426205924/https://twitter.com/ChristinaPushaw/status/1386786894340575236): Getting sick is not a moral failing.
* [26 April 2021](https://web.archive.org/web/20210426205434/https://twitter.com/ChristinaPushaw/status/1386785684015439882): Yeah t


1lT2ZMYXN0U3RhdHVzQ" +
	"2hhbmdlIjogIjIwMTUtMDctMjEiLCAiaGFzaCI6ICJ1eWpESnBOSm9LTjlDMmhxOEktd2dVeGt" +
	"kdXdBV1hRUUM5dXFrVHVHek5rPSIsICJhYWlkIjogIjAwMTYjMDAwMSIsICJzdGF0dXNSZXBvc" +
	"nRzIjogW3sic3RhdHVzIjogIkZJRE9fQ0VSVElGSUVEIiwgInVybCI6ICIiLCAiY2VydGlmaWN" +
	"hdGUiOiAiIiwgImVmZmVjdGl2ZURhdGUiOiAiMjAxNS0wNy0yMSJ9XX0sIHsidXJsIjogImh0d" +
	"HBzOi8vbWRzLmZpZG9hbGxpYW5jZS5vcmcvbWV0YWRhdGEvMDAxNiUyMzAwMDMiLCAidGltZU9" +
	"mTGFzdFN0YXR1c0NoYW5nZSI6ICIyMDE2LTAyLTEwIiwgImhhc2giOiAidFRlaGVMRDNHS0dqe" +
	"GZidlYyZG9PX25VbGd5NHF5Y0o0MnhHQlpUTnZ4WT0iLCAiYWFpZCI6ICIwMDE2IzAwMDMiLCA" +
	"ic3RhdHVzUmVwb3J0cyI6IFt7InN0YXR1cyI6ICJOT1RfRklET19DRVJUSUZJRUQiLCAidXJsI" +
	"jogIiIsICJjZXJ0aWZpY2F0ZSI6ICIiLCAiZWZmZWN0aXZlRGF0ZSI6ICIyMDE2LTAyLTEwIn1" +
	"dfSwgeyJ1cmwiOiAiaHR0cHM6Ly9tZHMuZmlkb2FsbGlhbmNlLm9yZy9tZXRhZGF0YS8wMDE2J" +
	"TIzMDAxMCIsICJ0aW1lT2ZMYXN0U3RhdHVzQ2hhbmdlIjogIjIwMTYtMDItMTAiLCAiaGFzaCI" +
	"6ICJSeWs0enpHSEV0M0hhOG5PQ1J3Wlo0VTh6VFdKeXhxTnFCNHpTcGRHR3k0PSIsICJhYWlkI" +
	"jogIjAwMTYjMDAxMCIsICJzdGF0dXNSZXBvcnRzIjogW3sic3RhdHVzIjogIk5PVF9GSURPX0N" +
	"FUlRJRklFRCIsICJ1cmwiOiAiIiwgImNlcnRpZmljYXRlIjogIiIsICJlZmZlY3RpdmVEYXRlI" +
	"jogIjIwMTYtMDItMTAifV19LCB7InVybCI6ICJodHRwczovL21kcy5maWRvYWxsaWFuY2Uub3J" +
	"nL21ldGFkYXRhLzAwMTYlMjMwMDIwIiwgInRpbWVPZkxhc3RTdGF0dXNDaGFuZ2UiOiAiMjAxN" +
	"i0wMi0xMCIsICJoYXNoIjogInBYQVktQ05EV0tiVC1mVS1HclFG


"bhanuvara"
  },
  "Time (ಸಮಯ)": {
    "year": "varsha",
    "month": "mase",
    "week": "vāra",
    "day": "dina",
    "hour": "ghaṇṭe",
    "minute": "nimisha",
    "second": "sekend",
    "morning": "beḷigge",
    "afternoon": "mādhyāhnike",
    "evening": "sāyanka",
    "night": "ratri",
    "time": "samaya"
  },
  "Verbs (ಕ್ರಿಯೆಗಳು)": {
    "work": "kelasa māḍu",
    "play": "ATavADisu",
    "walk": "nade",
    "run": "hogu",
    "drive": "cālana māḍu",
    "fly": "Udu",
    "swim": "neerige",
    "go": "hOgu",
    "stop": "nilisu",
    "follow": "anusarisu",
    "think": "hElu",
    "speak": "mAtanADu",
    "say": "heLu",
    "eat": "tinnu",
    "drink": "kUdhu",
    "kill": "kolli",
    "die": "sAyu",
    "smile": "biLidu muguLisu",
    "laugh": "hAsu",
    "cry": "neeru surisu",
    "buy": "kharidi mADu",
    "pay": "paise mADu",
    "sell": "mArATa mADu",
    "shoot": "goli hAku",
    "learn": "kalitu",
    "jump": "hELu",
    "smell": "sUrisu",
    "hear": "kEli",
    "listen": "gouravi",
    "taste": "rasavannu bhAvisu",
    "touch": "sparsisu",
    "see": "nodu",
    "watch": "nodu",
    "kiss": "muttADu",
    "burn": "dagisu",
    "melt": "Kyaṭa mADu",
    "dig": "karitu",
    "explode": "phatakasada mADu",
    "sit": "kUru",
    "stand": "nillu",
    "love": "prema mADu",
    "pass by": "nillu",
    "cut": "kATa",
    "fight": "jagAlu",
    "lie down": "naDu",
    "dance": "nRtya",
    "sleep": "nidda",
    "wake up": "eDamele",
    "sing": "giTisu",
    "count": "eLe",
    "marry": "maduve mADu",
    "pray": "prArthana mADu",
    "win": "jayisu",
    "lose": "hArADu",
    "mix": "misf mADu",
    "stir": "marini mADu",
    "bend": "kuNi mADu",
    "wash": "tOgi",
    "cook": "uppittu",
    "open": "tola",
    "close": "mUgisu",
    "write": "bare",
    "call": "nAve",
    "turn": "tuLu",
    "build": "nirmaNe mADu",
    "teach": "mElu",
    "grow": "bADu",
    "draw": "citra",
    "feed": "Bukku mADu",
    "catch": "hiDi",
    "throw": "eDeyu",
    "clean": "safAyI mADu",
    "find": "huduku",
    "fall": "biDumu",
    "push": "dh


 return;
    var middle = list.length ~/ 2;
    add(list[middle]);
    _balance(list.sublist(0, middle));
    _balance(list.sublist(middle + 1));
  }

  void _compareAndAdd(BinaryNode node, BinaryNode newNode) {
    // Don't allow duplicate values in Binary Search Tree.
    if (node.value == newNode.value) {
      return;
    }

    if (node.value!.compareTo(newNode.value) > 0) {
      if (node.left == null) {
        // newNode has lower value and becomes left child of the node.
        node.left = newNode;
      } else {
        _compareAndAdd(node.left!, newNode);
      }
    } else {
      if (node.right == null) {
        // newNode has greater value and becomes right child of node.
        node.right = newNode;
      } else {
        _compareAndAdd(node.right!, newNode);
      }
    }
  }

  BinaryNode<V>? _delete(BinaryNode<V>? node, V value) {
    // Base Case, Key not found
    if (node == null) return node;

    if (node.value!.compareTo(value) > 0) {
      node.left = _delete(node.left, value);
    } else if (node.value!.compareTo(value) < 0) {
      node.right = _delete(node.right, value);
    } else {
      // Node with value found.

      // Node has two children.
      if (node.left != null && node.right != null) {
        // Successor to the node is the next inOrder node.
        var successor = node.right;
        while (successor!.left != null) {
          successor = successor.left;
        }
        node.value = successor.value;
        node.right = _delete(node.right, successor.value!);
      } else {
        if (node.left != null) {
          // Node only has left child.
          node = node.left;
        } else if (node.right != null) {
          // Node only has right child.
          node = node.right;
        } else {
          // Childless node.
          node = null;
        }
      }
    }
    return node;
  }
}
import '../heaps/base.dart';

/// Node representing for a stack node
class StackNode<T> {
  /// The node value
  T data;

  /// The node below `this`
  StackNode<T>? below;

  /// Constructor
  StackNode(this.data);
}

/// A simple LIFO container.
class Stack<T> {
  /// Reference to the top of the stack
  StackNode<T>? _top;

  /// Size of the stack
  int size;

  /// Construct a new Stack
  Stack()
      : _top = null,
        size = 0;

  /// Checks if the stack is empty
  bool get isEmpty => _top == null;

  /// Pops the top-most element of the stack.
  T pop() {
    if (isEmpty) throw InvalidIndexError();
    var output = _top!;
    _top = _top?.below;
    size--;

    return output.data;
  }

  /// Returns the top-most element of the stack but keeps the stack unmodified
  T? peek() => _top?.data;

  /// Adds a new element on top of the stack.
  void push(T data) {
    var newNode = StackNode(data);
    if (isEmpty) {
      _top = newNode;
    } else {
      newNode.below = _top;
      _top = newNode;
    }
    size++;
  }
}
import './singly_linked_list.dart' show Node;
import '../heaps/base.dart';

/// This circular linked list is based off of [SinglyLinkedList]
class CircularSinglyLinkedList<T> {
  /// Head of [this]
  Node<T>? head;

  /// Size of [this]


-- Copyright (c) Happion Laboratories - see license at https://github.com/JamieFristrom/dungeonlife/blob/master/LICENSE.md

local DebugXL = require( game.ReplicatedStorage.TS.DebugXLTS ).DebugXL
local LogArea = require( game.ReplicatedStorage.TS.DebugXLTS ).LogArea
DebugXL:logI(LogArea.Executed, script:GetFullName())

local Localize = require( game.ReplicatedStorage.TS.Localize ).Localize
DebugXL:logD(LogArea.Requires, "IntroMessageScript: Localize required")

if not workspace.GameManagement.FastStart.Value then
	wait(6)  -- give dungeon life logo opportunity to spin, in local tests this was enough to let us see it for 2-3 secs
end
DebugXL:logD(LogArea.Requires, "IntroMessageScript: Logo wait done")

local Places = require( game.ReplicatedStorage.TS.PlacesManifest ).PlacesManifest
DebugXL:logD(LogArea.Requires, "IntroMessageScript required PlacesManifest")

if Places:getCurrentPlace() ~= Places.places.LowLevelServer and not workspace.GameManagement.FastStart.Value then
	game.ReplicatedFirst.TS.Loading.Disabled = true
	workspace.Signals.InventoryRE:FireServer( "CheckForDailyAward" )
	return
end

local introMessageFrame = script.Parent.Parent:WaitForChild("IntroMessage")
DebugXL:logD(LogArea.UI, "IntroMessageScript found IntroMessage frame")

local mainFrame = introMessageFrame:WaitForChild("Main")

function FinishIntro()
	delay( 1, function() mainFrame.Parent.Visible = false end )  -- hack delay gives fade curtain a chance to cover things up
	if not workspace.GameManagement.FastStart.Value then
		workspace.Signals.InventoryRE:FireServer( "CheckForDailyAward" )
	end
end

game.ReplicatedFirst.TS.Loading.Disabled = true

local showIntro = Places.getCurrentPlace()==Places.places.HighLevelServer

if showIntro then
	mainFrame.Parent.Visible = true
	local endPos = mainFrame.Position
	mainFrame.Position = UDim2.new(


Test1]),
            new Page(p.Test1, "/test1", [p.Test2, p.Test3, p.Test4, p.Test5]),
            new Page(p.Test2, "/test2"),
            new Page(p.Test3, "/test3"),
            new Page(p.Test4, "/test4"),
            new Page(p.Test5, "/test5")
        ];
        this.fixPages();
    }

    private fixPages() {
        let wasVague = false;
        if (this.pages.length < 1) {
            throw "There should be at least the home page";
        }

        let myThis = this;

        this.pages.forEach(currentPage => {
            // go through pages friends and see if they contain myself
            currentPage.connectionNames.forEach(pageName => {
                let pageIndex = myThis.indexOf(pageName);
                // this is a failure if it doesn't exist anywhere
                if (pageIndex === -1) {
                    console.error("Page " + pageName + " does not exist, which was referenced by " + currentPage.name);
                    wasVague = true;
                    return;
                }
                // if it doesn't exist then we add ourself
                if (this.pages[pageIndex].connectionNames.indexOf(currentPage.name) === -1) {
                    this.pages[pageIndex].connectionNames.push(currentPage.name);
                }
            });
        });

        if (wasVague) {
            throw new Error("Failed to fix page problems");
        }
    }

}export class ExcelCls{

    emitXmlHeader(headerTable) {
        var headerRow = '<ss:Row>\n';

        for (var item of headerTable) {

            headerRow += '  <ss:Cell>\n';
            headerRow += '    <ss:Data ss:Type="String">';
            headerRow += item + '</ss:Data>\n';

            headerRow += '  </ss:Cell>\n';
        }
        headerRow += '</ss:Row>\n';
        return '<?xml version="1.0"?>\n' +
            '<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">\n' +
            '<ss:Worksheet ss:Name="Sheet1">\n' +
            '<ss:Table>\n\n' + headerRow;
    }

    emitXmlFooter() {
        return '\n</ss:Table>\n' +
            '</ss:Worksheet>\n' +
            '</ss:Workbook>\n';
    }

    jsonToSsXml(jsonObject,headerTable,testTypes) {

        var row;
        var col;
        var xml;
        var data = typeof jsonObject != "object" ? JSON.parse(jsonObject) : jsonObject;

        xml = this.emitXmlHeader(headerTable);

        for (row = 0; row < data.length; row++) {
            xml += '<ss:Row>\n';

            for (col in data[row]) {
                xml += '  <ss:Cell>\n';
                xml += '    <ss:Data ss:Type="' + testTypes[col] + '">';
                xml += data[row][col] + '</ss:Data>\n';
                xml += '  </ss:Cell>\n';

            }

            xml += '</ss:Row>\n';
        }

        xml += this.emitXmlFooter();
        return xml;
    }

}import { SortField } from './sort-field';

/**
 * An object containing properties for sort events
 */
export class SortEvent {
  /**
   * The currently selected filterable field
   */
  field: SortField;

  /**
   * True if sort is ascending
   */
  isAscending: boolean;
}
function clipNum(value, min, max) {
  let out = value;
  if (value < min) {
    out = min;
  } else if (value > max) {


011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat}}@media print{html .btn.btn-ghost-danger,html[data-netbox-color-mode=dark] .btn.btn-ghost-danger,html[data-netbox-color-mode=light] .btn.btn-ghost-danger{color:#dc3545}html .btn.btn-ghost-danger:hover,html[data-netbox-color-mode=dark] .btn.btn-ghost-danger:hover,html[data-netbox-color-mode=light] .btn.btn-ghost-danger:hover{background-color:#dc35451f}}@media print{html .alert.alert-danger a:not(.btn),html .table-danger a:not(.btn),html[data-netbox-color-mode=dark] .alert.alert-danger a:not(.btn),html[data-netbox-color-mode=dark] .table-danger a:not(.btn),html[data-netbox-color-mode=light] .alert.alert-danger a:not(.btn),html[data-netbox-color-mode=light] .table-danger a:not(.btn){font-weight:700;color:#842029}html .alert.alert-danger .btn:not([class*=btn-outline]),html .table-danger .btn:not([class*=btn-outline]),html[data-netbox-color-mode=dark] .alert.alert-danger .btn:not([class*=btn-outline]),html[data-netbox-color-mode=dark] .table-danger .btn:not([class*=btn-outline]),html[data-netbox-color-mode=light] .alert.alert-danger .btn:not([class*=btn-outline]),html[data-netbox-color-mode=light] .table-danger .btn:not([class*=btn-outline]){border-color:#495057}}@media print{html .toast.bg-danger a:not(.btn),html[data-netbox-color-mode=dark] .toast.bg-danger a:not(.btn),html[data-netbox-color-mode=light] .toast.bg-danger a:not(.btn){font-weight:700;color:#f1aeb5}}@media print{html .badge.bg-danger,html .toast.bg-danger,html .toast-header.bg-danger,html .progress-bar.bg-danger,html[data-netbox-color-mode=dark] .badge.bg-danger,html[data-netbox-color-mode=dark] .toast.bg-danger,html[data-netbox-color-mode=dark] .toast-header.bg-danger,html[data-netbox-color-mode=dark] .progress-bar.bg-danger,html[data-netbox-color-mode=light] .badge.bg-danger,html[data-netbox-color-mode=light] .toast.bg-danger,html[data-netbox-color-mode=light] .toast-header.bg-danger,html[data-netbox-color-mode=light] .progress-bar.bg-danger{color:#fff}}@media print{html .bg-light button.btn-close,html[data-netbox-color-mode=dark] .bg-light button.btn-close,html[data-netbox-color-mode=light] .bg-light button.btn-close{background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%235d5e60'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0


print("A")
        }

        fun bar()
    }

    interface B {
        fun foo() {
            print("B")
        }

        fun bar() {
            print("bar")
        }
    }

    class C : A {
        override fun bar() {
            print("bar")
        }
    }

    class D : A, B {
        override fun foo() {
            super<A>.foo()
            super<B>.foo()
        }

        override fun bar() {
            super<B>.bar()
        }
    }

    class Child : MyInterface {
        override fun bar() {
            println("hello")
        }

        override val prop: Int = 29
    }

    interface MyInterface {
        fun bar()

        val prop: Int // 抽象的
        val propertyWithImplementation: String
            get() = "foo"

        fun foo() {
            print(prop)
        }
    }

    private fun testProperty() {
        val result = Address() // Kotlin 中没有“new”关键字
        result.name = result.name // 将调用访问器
    }

    class Address {
        var name: String = "Holmes, Sherlock"
        var state: String? = null
        val zip: String = "123456"
        val addr: String
            get() = this.state + " " + this.zip
        val addr1 get() = this.state + " " + this.zip
        var counter = 0 // 这个初始器直接为幕后字段赋值
            set(value) {
                if (value >= 0)
                    field = value
                // counter = value // ERROR StackOverflow: Using actual name 'counter' would make setter recursive
            }
    }

    private fun testClass() {
        Person()
        Empty()
        Person1("o")
        Person2("p")
        InitOrderDemo("so")
        Customer("sp")
        Customer1("PO")
        Person3("a", "b")
        Person4("dto")
        Rectangle()
        Polygon1()
        object : WildShape() {
            override fun draw() {
            }
        }
        Square()
        User()
    }

    class Person { /*……*/ }
    class Empty
    class Person1 constructor(firstName: String) { /*……*/ }
    class Person2(firstName: String) { /*……*/ }
    class InitOrderDemo(name: String) {
        val firstProperty = "First property: $name".also(::println)

        init {
            println("First initializer block that prints $name")
        }

        val secondProperty = "Second property: ${name.length}".also(::println)

        init {
            println("Second initializer block that prints ${name.length}")
        }
    }

    class Customer(name: String) {
        val customerKey = name.uppercase()
    }

    class Person3(
        val firstName: String,
        val lastName: String,
        var age: Int = 32, // 尾部逗号
    ) { /*……*/ }

    class Customer1 @Inject constructor(name: String) { /*……*/ }
    class Person4(val name: String) {
        val children: MutableList<Person4> = mutableListOf()

        constructor(name: String, parent: Person4) : this(name) {
            parent.children.add(this)
        }
    }

    abstract class Polygon {
        abstract fun draw()
    }

    class Rectangle1 : Polygon() {
        override fun draw() {
// draw the rectangle
        }
    }

    open class Polygon1 {
        open fun draw() {
// some default polygon drawing method
        }
    }

    abstract class WildShape : Polygon1() {
        // Classes that inherit WildS


			cullMode = GPUCullMode.Back
				),
				depthStencil = DepthStencilState(
					depthWriteEnabled = true,
					depthCompare = GPUCompareFunction.Less,
					format = GPUTextureFormat.Depth24Plus
				)
			)
		).bind()

		val depthTexture = device.createTexture(
			TextureDescriptor(
				size = Extent3D(renderingContext.width, renderingContext.height),
				format = GPUTextureFormat.Depth24Plus,
				usage = setOf(GPUTextureUsage.RenderAttachment),
			)
		).bind()

		val matrixSize = 4uL * 16uL // 4x4 matrix
		val uniformBufferSize = offset + matrixSize
		uniformBuffer = device.createBuffer(
			BufferDescriptor(
				size = uniformBufferSize,
				usage = setOf(GPUBufferUsage.Uniform, GPUBufferUsage.CopyDst)
			)
		).bind()

		uniformBindGroup1 = device.createBindGroup(
			BindGroupDescriptor(
				layout = renderPipeline.getBindGroupLayout(0u),
				entries = listOf(
					BindGroupEntry(
						binding = 0u,
						resource = BufferBinding(
							buffer = uniformBuffer,
							offset = 0u,
							size = matrixSize
						)
					)
				)
			)
		)

		uniformBindGroup2 = device.createBindGroup(
			BindGroupDescriptor(
				layout = renderPipeline.getBindGroupLayout(0u),
				entries = listOf(
					BindGroupEntry(
						binding = 0u,
						resource = BufferBinding(
							buffer = uniformBuffer,
							offset = offset,
							size = matrixSize
						)
					)
				)
			)
		)

		renderPassDescriptor = RenderPassDescriptor(
			colorAttachments = listOf(
				RenderPassColorAttachment(
					view = dummyTexture.createView().bind(), // Assigned later
					loadOp = GPULoadOp.Clear,
					clearValue = Color(0.5, 0.5, 0.5, 1.0),
					storeOp = GPUStoreOp.Store,
				)
			),
			depthStencilAttachment = RenderPassDepthStencilAttachment(
				view = depthTexture.createView(),
				depthClearValue = 1.0f,
				depthLoadOp = GPULoadOp.Clear,
				depthStoreOp = GPUStoreOp.Store
			)
		)

		val aspect = renderingContext.width.toDouble() / renderingContext.height.toDouble()
		val fox = Angle.fromRadians((2 * PI) / 5)
		projectionMatrix1 = Matrix4.perspective(fox, aspect, 1.0, 100.0)
			.translated(-2.0, 0.0, -7.0)
		projectionMatrix2 = Matrix4.perspective(fox, aspect, 1.0, 100.0)
			.translated(2.0, 0.0, -7.0)
	}

	override suspend fun AutoClosableContext.render() {

		val transformationMatrix1 = getTransformationMatrix(
			frame / 100.0,
			projectionMatrix1
		)
		val transformationMatrix2 = getTransformationMatrix(
			frame / 100.0,
			projectionMatrix2
		)

		transformationMatrix1.asArraybuffer {
			device.queue.writeBuffer(uniformBuffer, 0u, it)
		}

		transformationMatrix2.asArraybuffer {
			device.queue.writeBuffer(uniformBuffer, offset, it)
		}

		renderPassDescriptor = (renderPassDescriptor as RenderPassDescriptor).copy(
			colorAttachments = listOf(
				(renderPassDescriptor.colorAttachments[0] as RenderPassColorAttachment).copy(
					view = renderingContext.getCurrentTexture()
						.bind()
						.createView()
				)
			)
		)

		val encoder = device.createCommandEncoder()
			.bind()

		encoder.beginRenderPass(renderPassDescriptor) {
			setPipeline(renderPipeline)
			setBindGroup(0u, uniformBindGroup1)
			setVertexBuffer(0u, verticesBuffer)

			// Bind the bind group (with the transformation matrix) for
			// each cube, and draw.
			setBind


                    if cls not in orgs_by_type:
                        orgs_by_type[cls] = Counter()

                    orgs_by_type[cls][org_name] += 1

            # Add to combined organizations
            for org_type, orgs in orgs_by_type.items():
                if org_type not in combined_orgs_by_type:
                    combined_orgs_by_type[org_type] = Counter()
                combined_orgs_by_type[org_type].update(orgs)

    return combined_orgs_by_type

if __name__ == "__main__":
    main()


0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E42\u0E2B\u0E25\u0E14\u0E41\u0E1A\u0E1A\u0E2D\u0E31\u0E01\u0E29\u0E23\u0E40\u0E27\u0E47\u0E1A %1",FirefoxCantLoadWebFont:"Firefox \u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E42\u0E2B\u0E25\u0E14\u0E41\u0E1A\u0E1A\u0E2D\u0E31\u0E01\u0E29\u0E23\u0E40\u0E27\u0E47\u0E1A\u0E08\u0E32\u0E01\u0E42\u0E2E\u0E2A\u0E15\u0E4C\u0E23\u0E30\u0E22\u0E30\u0E44\u0E01\u0E25\u0E44\u0E14\u0E49",CantFindFontUsing:"\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E41\u0E1A\u0E1A\u0E2D\u0E31\u0E01\u0E29\u0E23\u0E17\u0E35\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 %1",WebFontsNotAvailable:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E41\u0E1A\u0E1A\u0E2D\u0E31\u0E01\u0E29\u0E23\u0E40\u0E27\u0E47\u0E1A \u0E08\u0E30\u0E43\u0E0A\u0E49\u0E41\u0E1A\u0E1A\u0E2D\u0E31\u0E01\u0E29\u0E23\u0E23\u0E39\u0E1B\u0E20\u0E32\u0E1E\u0E41\u0E17\u0E19"}});MathJax.Ajax.loadComplete("[MathJax]/localization/th/HTML-CSS.js");
/*
 *  /MathJax/localization/th/TeX.js
 *
 *  Copyright (c) 2009-2018 The MathJax Consortium
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS O


		for j := 0; j < n; j++ {
						if d.index >= d.windowEnd-1 {
							break
						}

						d.tokens.tokens[d.tokens.n] = literalToken(uint32(d.window[d.index-1]))
						d.tokens.n++
						if d.tokens.n == maxFlateBlockTokens {
							if d.err = d.writeBlock(d.tokens, d.index, false); d.err != nil {
								return
							}
							d.tokens.n = 0
						}
						d.index++
					}
					// Flush last byte
					d.tokens.tokens[d.tokens.n] = literalToken(uint32(d.window[d.index-1]))
					d.tokens.n++
					d.byteAvailable = false
					// d.length = minMatchLength - 1 // not needed, since d.ii is reset above, so it should never be > minMatchLength
					if d.tokens.n == maxFlateBlockTokens {
						if d.err = d.writeBlock(d.tokens, d.index, false); d.err != nil {
							return
						}
						d.tokens.n = 0
					}
				}
			} else {
				d.index++
				d.byteAvailable = true
			}
		}
	}
}

func (d *compressor) store() {
	if d.windowEnd > 0 && (d.windowEnd == maxStoreBlockSize || d.sync) {
		d.err = d.writeStoredBlock(d.window[:d.windowEnd])
		d.windowEnd = 0
	}
}

// fillWindow will fill the buffer with data for huffman-only compression.
// The number of bytes copied is returned.
func (d *compressor) fillBlock(b []byte) int {
	n := copy(d.window[d.windowEnd:], b)
	d.windowEnd += n
	return n
}

// storeHuff will compress and store the currently added data,
// if enough has been accumulated or we at the end of the stream.
// Any error that occurred will be in d.err
func (d *compressor) storeHuff() {
	if d.windowEnd < len(d.window) && !d.sync || d.windowEnd == 0 {
		return
	}
	d.w.writeBlockHuff(false, d.window[:d.windowEnd])
	d.err = d.w.err
	d.windowEnd = 0
}

// storeHuff will compress and store the currently added data,
// if enough has been accumulated or we at the end of the stream.
// Any error that occurred will be in d.err
func (d *compressor) storeSnappy() {
	// We only compress if we have maxStoreBlockSize.
	if d.windowEnd < maxStoreBlockSize {
		if !d.sync {
			return
		}
		// Handle extremely small sizes.
		if d.windowEnd < 128 {
			if d.windowEnd == 0 {
				return
			}
			if d.windowEnd <= 32 {
				d.err = d.writeStoredBlock(d.window[:d.windowEnd])
				d.tokens.n = 0
				d.windowEnd = 0
			} else {
				d.w.writeBlockHuff(false, d.window[:d.windowEnd])
				d.err = d.w.err
			}
			d.tokens.n = 0
			d.windowEnd = 0
			d.snap.Reset()
			return
		}
	}

	d.snap.Encode(&d.tokens, d.window[:d.windowEnd])
	// If we made zero matches, store the block as is.
	if int(d.tokens.n) == d.windowEnd {
		d.err = d.writeStoredBlock(d.window[:d.windowEnd])
		// If we removed less than 1/16th, huffman compress the block.
	} else if int(d.tokens.n) > d.windowEnd-(d.windowEnd>>4) {
		d.w.writeBlockHuff(false, d.window[:d.windowEnd])
		d.err = d.w.err
	} else {
		d.w.writeBlockDynamic(d.tokens


essages.required,e.fullField))},GM=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,KM=/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i,qM={integer:function(e){return qM.number(e)&&parseInt(e,10)===e},float:function(e){return qM.number(e)&&!qM.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return!!new RegExp(e)}catch(Cne){return!1}},date:function(e){return"function"==typeof e.getTime&&"function"==typeof e.getMonth&&"function"==typeof e.getYear&&!isNaN(e.getTime())},number:function(e){return!isNaN(e)&&"number"==typeof e},object:function(e){return"object"==typeof e&&!qM.array(e)},method:function(e){return"function"==typeof e},email:function(e){return"string"==typeof e&&e.length<=320&&!!e.match(GM)},url:function(e){return"string"==typeof e&&e.length<=2048&&!!e.match(function(){if(YM)return YM;var e="[a-fA-F\\d:]",t=function(t){return t&&t.includeBoundaries?"(?:(?<=\\s|^)(?="+e+")|(?<="+e+")(?=\\s|$))":""},n="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",o="[a-fA-F\\d]{1,4}",r=("\n(?:\n(?:"+o+":){7}(?:"+o+"|:)|                                    // 1:2:3:4:5:6:7::  1:2:3:4:5:6:7:8\n(?:"+o+":){6}(?:"+n+"|:"+o+"|:)|                             // 1:2:3:4:5:6::    1:2:3:4:5:6::8   1:2:3:4:5:6::8  1:2:3:4:5:6::1.2.3.4\n(?:"+o+":){5}(?::"+n+"|(?::"+o+"){1,2}|:)|                   // 1:2:3:4:5::      1:2:3:4:5::7:8   1:2:3:4:5::8    1:2:3:4:5::7:1.2.3.4\n(?:"+o+":){4}(?:(?::"+o+"){0,1}:"+n+"|(?::"+o+"){1,3}|:)| // 1:2:3:4::        1:2:3:4::6:7:8   1:2:3:4::8      1:2:3:4::6:7:1.2.3.4\n(?:"+o+":){3}(?:(?::"+o+"){0,2}:"+n+"|(?::"+o+"){1,4}|:)| // 1:2:3::          1:2:3::5:6:7:8   1:2:3::8        1:2:3::5:6:7:1.2.3.4\n(?:"+o+":){2}(?:(?::"+o+"){0,3}:"+n+"|(?::"+o+"){1,5}|:)| // 1:2::            1


libc::STDERR_FILENO)))
    }
    else {
        Ok(outfile)
    }
}

use libnx_rs::console::ConsoleHandle;
use libnx_rs::hid::{HidContext, Controller, HidControllerID};
use libnx_rs::libnx::HidControllerKeys;
use libnx_rs::usbhs::{UsbHsContext, Interface, InterfaceFilter, InterfaceInfo, InterfaceAvailableEvent};
use usb_comm::{UsbClient};
use vecwrapper::VecNewtype;
use buf_scsi::OffsetScsiDevice;

use std::time::{Instant, Duration};

pub fn runner() {
    let mut console = ConsoleHandle::init_default();
    console.clear();

    println!("Setting up sterr file hooks.");
    console.update();
    let mut error_file = match redirect_stderr("nx_fatdrive_sterr.txt") {
        Ok(fl) => fl,
        Err(e) => {
            println!("Error setting stderr output: {:?}", e);
            let delay_start = Instant::now();
            while delay_start.elapsed() < Duration::from_secs(5) {
                console.update();
            }
            return;
        }
    };
    console.update();

    multprint!(console,error_file,"Setting up HID context.");
    let mut hid_ctx = HidContext::new();
    let controller = hid_ctx.get_controller(HidControllerID::CONTROLLER_P1_AUTO);

    multprint!(console,error_file,"Setting up usb:hs context");
    let mut usbhs_ctx = match UsbHsContext::initialize() {
        Ok(ctx) => ctx,
        Err(e) => {
            multprint!(console, error_file, "Failed setting up usb:hs context: {:?}", e);
            let delay_start = Instant::now();
            while delay_start.elapsed() < Duration::from_secs(5) {
                console.update();
            }
            return;
        }
    };

    let filter : InterfaceFilter = InterfaceFilter::new()
        .with_interface_class(8)
        .with_interface_subclass(6)
        .with_interface_protocol(80);

    multprint!(console, error_file, "Waiting for usb event.");
    let evt = match InterfaceAvailableEvent::create(true, 0, filter) {
        Ok(ev) => ev,
        Err(e) => {
            multprint!(console, error_file, "Failed building iface available event: {:?}", e);
            let delay_start = Instant::now();
            while delay_start.elapsed() < Duration::from_secs(5) {
                console.update();
            }
            return;

        }
    };
    if let Err(e) = evt.wait(u64::max_value()) {
        multprint!(console, error_file, "Failed waiting for event: {:?}", e);
        let delay_start = Instant::now();
        while delay_start.elapsed() < Duration::from_secs(5) {
            console.update();
        }
        return;
    }
    multprint!(console,error_file,"Looking for usb devices.");

    let mut interfaces = match usbhs_ctx.query_available_interfaces(filter, 3) {
        Ok(ifaces) => ifaces,
        Err(e) => {
            multprint!(console, error_file, "Failed querying available interfaces: {:?}", e);
            let delay_start = Instant::now();
            while delay_start.elapsed() < Duration::from_secs(5) {
                console.update();
            }
            return;
        }
    };

    multprint!(


/gametech/feed\", \"image\":\"https://files.carolus.kodeco.com/drlaqjkqbxk7d65nqm8e03cdpul7?response_content_disposition=inline%3B+filename%3D%22GameTech.png%22%3B+filename%2A%3DUTF-8%27%27GameTech.png\"}," +
    "{\"platform\":\"growth\", \"url\":\"https://kodeco.com/professional-growth/feed\", \"image\":\"https://files.carolus.kodeco.com/gl22boss4ptciv7px3nnzcnct4ht?response_content_disposition=inline%3B+filename%3D%22progro.png%22%3B+filename%2A%3DUTF-8%27%27progro.png\"}" +
    "]"

private const val GRAVATAR_EMAIL = "YOUR_GRAVATAR_EMAIL"

class FeedPresenter(private val feed: GetFeedData) {

  private val json = Json { ignoreUnknownKeys = true }

  val content: List<KodecoContent> by lazy {
    json.decodeFromString(KODECO_CONTENT)
  }

  @NativeCoroutines
  public fun fetchAllFeeds(): Flow<List<KodecoEntry>> {
    Logger.d(TAG, "fetchAllFeeds")

    return flow {
      for (feed in content) {
        emit(
            fetchFeed(feed.platform, feed.image, feed.url)
        )
      }
    }.flowOn(Dispatchers.IO)
  }

  private suspend fun fetchFeed(
      platform: PLATFORM,
      imageUrl: String,
      feedUrl: String,
  ): List<KodecoEntry> {
    return CoroutineScope(Dispatchers.IO).async {
      val entries = feed.invokeFetchKodecoEntry(
          platform = platform,
          imageUrl = imageUrl,
          feedUrl = feedUrl
      )

      val tasks = mutableListOf<Job>()
      for (entry in entries) {
        tasks.add(CoroutineScope(Dispatchers.IO).launch {
          entry.imageUrl = fetchLinkImage(entry.link)
        })
      }

      tasks.joinAll()
      entries
    }.await()
  }

  private suspend fun fetchLinkImage(link: String): String {
    return CoroutineScope(Dispatchers.IO).async {
      feed.invokeFetchImageUrlFromLink(
          link
      )
    }.await()
  }

  public fun fetchMyGravatar(cb: FeedData) {
    Logger.d(TAG, "fetchMyGravatar")

    CoroutineScope(Dispatchers.IO).launch {
      cb.onMyGravatarData(fetchMyGravatar())
    }
  }

  @NativeCoroutines
  public suspend fun fetchMyGravatar(): GravatarEntry {
    return CoroutineScope(Dispatchers.IO).async {
      feed.invokeGetMyGravatar(
          hash = GRAVATAR_EMAIL.toByteArray().md5().toString()
      )
    }.await()
  }
}/*
 * Copyright (c) 2025 Kodeco Inc
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
 * distribute, sublicense, create a derivative work, and/or sell copies of the
 * Software in any work that is designed, intended, or marketed for pedagogical or
 * instructional purposes related to programming, coding, application development,
 * or information technology.  Permission for such use, copying, modification,
 * merger, publication, distribution, sublicensing, creation of derivative works,
 * or sale is expressly withheld.
 *
 * This project and source code may use libraries or frameworks that are
 * released under various Open-Source licenses. Use of those libraries and
 * frameworks are governed by their own individual licenses.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WIT


asicPodManager(fakeMirrorClient)
	kubelet.statusManager = status.NewManager(fakeKubeClient, kubelet.podManager)
	kubelet.containerRefManager = kubecontainer.NewRefManager()
	diskSpaceManager, err := newDiskSpaceManager(mockCadvisor, DiskSpacePolicy{})
	if err != nil {
		t.Fatalf("can't initialize disk space manager: %v", err)
	}
	kubelet.diskSpaceManager = diskSpaceManager

	kubelet.containerRuntime = fakeRuntime
	kubelet.runtimeCache = containertest.NewFakeRuntimeCache(kubelet.containerRuntime)
	kubelet.reasonCache = NewReasonCache()
	kubelet.podCache = containertest.NewFakeCache(kubelet.containerRuntime)
	kubelet.podWorkers = &fakePodWorkers{
		syncPodFn: kubelet.syncPod,
		cache:     kubelet.podCache,
		t:         t,
	}

	kubelet.probeManager = probetest.FakeManager{}
	kubelet.livenessManager = proberesults.NewManager()

	kubelet.containerManager = cm.NewStubContainerManager()
	fakeNodeRef := &api.ObjectReference{
		Kind:      "Node",
		Name:      testKubeletHostname,
		UID:       types.UID(testKubeletHostname),
		Namespace: "",
	}
	fakeImageGCPolicy := ImageGCPolicy{
		HighThresholdPercent: 90,
		LowThresholdPercent:  80,
	}
	kubelet.imageManager, err = newImageManager(fakeRuntime, mockCadvisor, fakeRecorder, fakeNodeRef, fakeImageGCPolicy)
	fakeClock := util.NewFakeClock(time.Now())
	kubelet.backOff = flowcontrol.NewBackOff(time.Second, time.Minute)
	kubelet.backOff.Clock = fakeClock
	kubelet.podKillingCh = make(chan *kubecontainer.PodPair, 20)
	kubelet.resyncInterval = 10 * time.Second
	kubelet.reservation = kubetypes.Reservation{
		Kubernetes: api.ResourceList{
			api.ResourceCPU:    resource.MustParse(testReservationCPU),
			api.ResourceMemory: resource.MustParse(testReservationMemory),
		},
	}
	kubelet.workQueue = queue.NewBasicWorkQueue(fakeClock)
	// Relist period does not affect the tests.
	kubelet.pleg = pleg.NewGenericPLEG(fakeRuntime, 100, time.Hour, nil, util.RealClock{})
	kubelet.clock = fakeClock
	kubelet.setNodeStatusFuncs = kubelet.defaultNodeStatusFuncs()

	// TODO: Factor out "StatsProvider" from Kubelet so we don't have a cyclic dependency
	volumeStatsAggPeriod := time.Second * 10
	kubelet.resourceAnalyzer = stats.NewResourceAnalyzer(kubelet, volumeStatsAggPeriod, kubelet.containerRuntime)
	nodeRef := &api.ObjectReference{
		Kind:      "Node",
		Name:      kubelet.nodeName,
		UID:       types.UID(kubelet.nodeName),
		Namespace: "",
	}
	// setup eviction manager
	evictionManager, evictionAdmitHandler, err := eviction.NewManager(kubelet.resourceAnalyzer, eviction.Config{}, killPodNow(kubelet.podWorkers), fakeRecorder, nodeRef, kubelet.clock)
	if err != nil {
		t.Fatalf("failed to initialize eviction manager: %v", err)
	}
	kubelet.evictionManager = evictionManager
	kubelet.AddPodAdmitHandler(evictionAdmitHandler)

	plug := &volumetest.FakeVolumePlugin{PluginName: "fake", Host: nil}
	kubelet.volumePluginMgr, err =
		NewInitializedVolumePluginMgr(kubelet, []volume.VolumePlugin{plug})
	if err != nil {


      return;
        }
    }
}

int main(void)
{
    mainLoop = g_main_loop_new(NULL, FALSE);

    dbus_conn = g_dbus_setup_bus(DBUS_BUS_SYSTEM, NULL, NULL);

    bluez_client_init(dbus_conn, BLUEZ_SERVICE, BLUEZ_PATH, client_ready);

    bluez_set_property_change_fn(propertyChanged);

    // Program does not return from this call until the main loop exits
    // due to a call to g_main_loop_quit().
    g_main_loop_run(mainLoop);

    g_main_loop_unref(mainLoop);
    mainLoop = NULL;

    // Shut down notification input pipe, disconnect from DBus watches, and
    // cancel and free any DBus messaging in progress.
    bluez_client_exit();

    // After calls into the BlueZ "helper libraries" the reference count on
    // the DBus connection to the system bus is hopelessly unbalanced,
    // finishing with 5 or 6 left over.  This doesn't seem to do any long term
    // harm to the system, however, since after exiting the program and
    // restarting the reference count does not accumulate.
    dbus_connection_unref(dbus_conn);

    return 0;
}


FirstOrNull()

    override suspend fun debugSegfault() = ops.debugSegfault().awaitFirstOrNull().let { Unit }

    override suspend fun flushall(): String? = ops.flushall().awaitFirstOrNull()

    override suspend fun flushall(flushMode: FlushMode): String? = ops.flushall(flushMode).awaitFirstOrNull()

    override suspend fun flushallAsync(): String? = ops.flushallAsync().awaitFirstOrNull()

    override suspend fun flushdb(): String? = ops.flushdb().awaitFirstOrNull()

    override suspend fun flushdb(flushMode: FlushMode): String? = ops.flushdb(flushMode).awaitFirstOrNull()

    override suspend fun flushdbAsync(): String? = ops.flushdbAsync().awaitFirstOrNull()

    override suspend fun info(): String? = ops.info().awaitFirstOrNull()

    override suspend fun info(section: String): String? =
        ops.info(section).awaitFirstOrNull()

    override suspend fun lastsave(): Date? = ops.lastsave().awaitFirstOrNull()

    override suspend fun memoryUsage(key: K): Long? =
        ops.memoryUsage(key).awaitFirstOrNull()

    override suspend fun replicaof(host: String, port: Int): String? =
        ops.replicaof(host, port).awaitFirstOrNull()

    override suspend fun replicaofNoOne(): String? =
        ops.replicaofNoOne().awaitFirstOrNull()

    override suspend fun save(): String? = ops.save().awaitFirstOrNull()

    override suspend fun shutdown(save: Boolean) =
        ops.shutdown(save).awaitFirstOrNull().let { Unit }

    override suspend fun shutdown(args: ShutdownArgs) =
        ops.shutdown(args).awaitFirstOrNull().let { Unit }

    override suspend fun slaveof(host: String, port: Int): String? =
        ops.slaveof(host, port).awaitFirstOrNull()

    override suspend fun slaveofNoOne(): String? = ops.slaveofNoOne().awaitFirstOrNull()

    override suspend fun slowlogGet(): List<Any> = ops.slowlogGet().asFlow().toList()

    override suspend fun slowlogGet(count: Int): List<Any> =
        ops.slowlogGet(count).asFlow().toList()

    override suspend fun slowlogLen(): Long? = ops.slowlogLen().awaitFirstOrNull()

    override suspend fun slowlogReset(): String? = ops.slowlogReset().awaitFirstOrNull()

    override suspend fun time(): List<V> = ops.time().asFlow().toList()

}

/*
 * Copyright 2020-Present, Redis Ltd. and Contributors
 * All rights reserved.
 *
 * Licensed under the MIT License.
 *
 * This file contains contributions from third-party contributors
 * licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.lettuce.core.api.async

import io.lettuce.core.ExperimentalLettuceCoroutinesApi
import io.lettuce.core.TransactionResult
import kotlinx.coroutines.future.await

/**
 * Allows to create transaction DSL block with [RedisAsyncCommands].
 *
 * @author Mikhael Sokolov
 * @since 6.0
 */
@ExperimentalLettuceCoroutinesApi
suspend inline fun <K, V> RedisAsyncCommands<K, V>.multi(action: RedisAsyncCommands<K, V>.() -> Unit): TransactionResult = try {
    multi().await


AAA", "parent_id": "aaa2c405-6671-4316-ac22-1e698937e900", "finish_details": {"type": "stop", "stop_tokens": [200002]}, "is_complete": true, "request_id": "8943da27fcb573c6-JNB", "timestamp_": "absolute"}, "recipient": "all", "channel": null}, "parent": "aaa2c405-6671-4316-ac22-1e698937e900", "children": ["aaa25516-f403-4aaa-b344-0176be5ee3e4"]}, "aaa25516-f403-4aaa-b344-0176be5ee3e4": {"id": "aaa25516-f403-4aaa-b344-0176be5ee3e4", "message": {"id": "aaa25516-f403-4aaa-b344-0176be5ee3e4", "author": {"role": "user", "name": null, "metadata": {}}, "create_time": 1718468160.560351, "update_time": null, "content": {"content_type": "text", "parts": ["i dont see any of my file in my repository "]}, "status": "finished_successfully", "end_turn": null, "weight": 1.0, "metadata": {"request_id": "8943dcb0eb507415-JNB", "message_source": null, "timestamp_": "absolute", "message_type": null}, "recipient": "all", "channel": null}, "parent": "1c2452e7-5301-4331-b7b0-99d5cb311669", "children": ["b77a51c4-d2e0-435b-bf5a-2e0017f5d89b"]}, "b77a51c4-d2e0-435b-bf5a-2e0017f5d89b": {"id": "b77a51c4-d2e0-435b-bf5a-2e0017f5d89b", "message": {"id": "b77a51c4-d2e0-435b-bf5a-2e0017f5d89b", "author": {"role": "assistant", "name": null, "metadata": {}}, "create_time": 1718468184.533612, "update_time": null, "content": {"content_type": "text", "parts": ["If you don't see any files in your repository after pushing them, there could be several reasons. Let's troubleshoot this step by step.\n\n### Step-by-Step Troubleshooting\n\n#### 1. Verify the Remote Repository URL\nMake sure you have set the correct remote repository URL:\n```bash\ngit remote -v\n```\nYou should see output similar to:\n```bash\norigin  https://github.com/username/repository.git (fetch)\norigin  https://github.com/username/repository.git (push)\n```\nIf the URL is incorrect, set the correct URL:\n```bash\ngit remote set-url origin https://github.com/username/repository.git\n```\n\n#### 2. Check the Branch Name\nEnsure you're on the correct branch. By default, GitHub uses `main` or `master`. Check your current branch:\n```bash\ngit branch\n```\nIf you're on a different branch, switch to `main` or `master`:\n```bash\ngit checkout main\n```\nor\n```bash\ngit checkout master\n```\n\n#### 3. Stage and Commit Your Changes\nMake sure your changes are staged and committed:\n```bash\ngit add .\ngit commit -m "Your commit message"\n```\n\n#### 4. Push to the Correct Branch\nPush your changes to the correct branch on GitHub:\n```bash\ngit push origin main\n```\nor\n```bash\ngit push origin master\n```\nIf this is the first time you're pushing to this branch, you might need to set the upstream branch:\n```bash\ngit push -u origin main\n```\nor\n```bash\ngit push -u origin master\n```\n\n### Common Issues and Fixes\n\n#### Untracked Files\nIf you forgot to add your files, they won't be committed and pushed. Check for untracked files:\n```bash\ngit status\n```\nIf you see untracked files, add them:\n```bash\ngit add .\n```\n\


  padding: 0;
  width: 52px;
  text-indent: -21px;
  margin-right: 0;
  -webkit-transition: text-indent .3s ease;
  -o-transition: text-indent .3s ease;
  transition: text-indent .3s ease;
  top: auto;
}
input[type=checkbox].ace.ace-switch + .lbl::after {
  font-family: 'Open Sans';
  content: 'III';
  font-size: 12px;
  font-weight: normal;
  letter-spacing: 0;
  color: #AAA;
  text-shadow: none;
  background-color: #FFF;
  border-radius: 100%;
  width: 22px;
  height: 22px;
  line-height: 22px;
  text-align: center;
  position: absolute;
  top: -2px;
  left: -3px;
  -webkit-box-shadow: 0px 1px 1px 1px rgba(0,0,0,.3);
  box-shadow: 0px 1px 1px 1px rgba(0,0,0,.3);
  -webkit-transition: left .3s ease;
  -o-transition: left .3s ease;
  transition: left .3s ease;
}
input[type=checkbox].ace.ace-switch:checked + .lbl::before {
  text-indent: 8px;
  color: #FFF;
  text-shadow: 0 0 0 #FFF;
  background-color: #8ab2c9;
  border-color: #6a8ca8;
}
input[type=checkbox].ace.ace-switch:checked + .lbl::after {
  left: 34px;
  background-color: #FFF;
  color: #98A0A5;
}
input[type=checkbox].ace.ace-switch.ace-switch-2 + .lbl::before {
  content: "YES\a0\a0\a0\a0\a0\a0\a0\a0\a0NO";
}
input[type=checkbox].ace.ace-switch.ace-switch-3 + .lbl::after {
  font-family: FontAwesome;
  font-size: 13px;
  line-height: 22px;
  content: "\f00d";
  top: -1px;
  text-shadow: none;
  padding: 0;
  text-align: center;
  color: #BBB;
  letter-spacing: 0;
}
input[type=checkbox].ace.ace-switch.ace-switch-3:checked + .lbl::after {
  content: "\f00c";
  color: #8AB2C9;
  text-shadow: none;
}
input[type=checkbox].ace.ace-switch.ace-switch-4,
input[type=checkbox].ace.ace-switch.ace-switch-5 {
  width: 60px;
}
input[type=checkbox].ace.ace-switch.ace-switch-4 + .lbl::before,
input[type=checkbox].ace.ace-switch.ace-switch-5 + .lbl::before {
  content: "ON\a0\a0\a0\a0\a0\a0\a0\a0\a0\a0\a0OFF";
  font-size: 12px;
  line-height: 21px;
  height: 24px;
  overflow: hidden;
  border-radius: 12px;
  background-color: #8b9aa3;
  border: 1px solid #8b9aa3;
  color: #FFF;
  width: 56px;
  text-indent: -25px;
  text-shadow: 0 0 0 #FFF;
  display: inline-block;
  position: relative;
  box-shadow: none;
  -webkit-transition: all .3s ease;
  -o-transition: all .3s ease;
  transition: all .3s ease;
}
input[type=checkbox].ace.ace-switch.ace-switch-4 + .lbl::after,
input[type=checkbox].ace.ace-switch.ace-


 par des ^ afin de ne pas
    -- interferer avec les events keys (qui utilisent &&) lors de leur traitement
    local splitedMessage = str_split(message, "^")
    local messageType = splitedMessage[1]

    if (messageType == "accept_invite") then
        -- Si aucun event n'est en cours alors on refuse les "accept_invite" par défaut
        if NOTSVPC["admin"]["eventStatus"] == 0 then
            return
        end

        -- Si le joueur a déjà accepté l'invitation
        if NOTSVPC["admin"]["participants"][sender] ~= nil then
            return
        end

        if checkInvitationAccept(sender) == false then
            print("[ADMIN] " .. sender .. " n'a pas été invité mais essaie de rejoindre !") -- avec /joinevent <admin-player>
            return
        end

        print("[ADMIN] " .. sender .. " a accepté votre invitation !")

        -- Ajout du joueur à la liste des participants, avec commande langue par defaut "enUS"

        local userLocale = "enUS"

        if is_locale_supported(splitedMessage[2]) then
            userLocale = splitedMessage[2]
        end

        NOTSVPC["admin"]["participants"][sender] = {}
        NOTSVPC["admin"]["participants"][sender]["locale"] = userLocale
        NOTSVPC["admin"]["participants"][sender]["status"] = 0

        displayParticipants()
    elseif (messageType == "accept_start") then
        -- Si aucun event n'est en cours alors on refuse les "accept_invite" par défaut
        if NOTSVPC["admin"]["eventStatus"] == 0 then
            return
        end

        if checkInvitationAccept(sender) == false then
            return
        end

        NOTSVPC["admin"]["participants"][sender]["status"] = 1
    end
end)


/*
 * Copyright 1994-2009 Clozure Associates
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
	include(m4macros.m4)
        ifdef(`LOWMEM_BIAS',`
`LOWMEM_BIAS' = LOWMEM_BIAS
',`
`LOWMEM_BIAS' = 0
')
        undefine(`LOWMEM_BIAS')
        /* DWARF2 exception fsm */
        DW_CFA_advance_loc = 0x40
        DW_CFA_offset = 0x80
        DW_CFA_restore = 0xc0
        DW_CFA_nop = 0x00
        DW_CFA_set_loc = 0x01
        DW_CFA_advance_loc1 = 0x02
        DW_CFA_advance_loc2 = 0x03
        DW_CFA_advance_loc4 = 0x04
        DW_CFA_offset_extended = 0x05
        DW_CFA_restore_extended = 0x06
        DW_CFA_undefined = 0x07
        DW_CFA_same_value = 0x08
        DW_CFA_register = 0x09


pnexus';
        bid4.cpm = 2.25;
        bid4.adId = '8383838';
        enableSendAllBids = true;

        bidsReceived.push(bid4);
      });

      it('when sendBidsControl.bidLimit is set greater than 0 in getHighestCpmBidsFromBidPool', function () {
        config.setConfig({
          sendBidsControl: {
            bidLimit: 2,
            dealPrioritization: true
          }
        });

        const bids = getHighestCpmBidsFromBidPool(bidsReceived, getHighestCpm, 2);

        expect(bids.length).to.equal(3);
        expect(bids[0].adId).to.equal('8383838');
        expect(bids[1].adId).to.equal('148018fe5e');
        expect(bids[2].adId).to.equal('48747745');
      });

      it('when sendBidsControl.bidLimit is set greater than 0 and deal priortization is false in getHighestCpmBidsFromBidPool', function () {
        config.setConfig({
          sendBidsControl: {
            bidLimit: 2,
            dealPrioritization: false
          }
        });

        const bids = getHighestCpmBidsFromBidPool(bidsReceived, getHighestCpm, 2);

        expect(bids.length).to.equal(3);
        expect(bids[0].adId).to.equal('8383838');
        expect(bids[1].adId).to.equal('148018fe5e');
        expect(bids[2].adId).to.equal('48747745');
      });

      it('selects the top n number of bids when enableSendAllBids is true and and bitLimit is set', function () {
        let getAdUnitsStub = sandbox.stub(auctionManager, 'getAdUnits').callsFake(() => ([
          {
            code: '/123456/header-bid-tag-0',
          },
        ]));

        config.setConfig({
          sendBidsControl: {
            bidLimit: 1
          }
        });

        const targeting = targetingInstance.getAllTargeting(['/123456/header-bid-tag-0']);
        const limitedBids = Object.keys(targeting['/123456/header-bid-tag-0']).filter(key => key.indexOf(TARGETING_KEYS.PRICE_BUCKET + '_') !== -1)

        getAdUnitsStub.restore();
        expect(limitedBids.length).to.equal(1);
      });

      it('sends all bids when enableSendAllBids is true and and bitLimit is above total number of bids received', function () {
        config.setConfig({
          sendBidsControl: {
            bidLimit: 50
          }
        });

        const targeting = targetingInstance.getAllTargeting(['/123456/header-bid-tag-0']);
        const limitedBids = Object.keys(targeting['/123456/header-bid-tag-0']).filter(key => key.indexOf(TARGETING_KEYS.PRICE_BUCKET + '_') !== -1)

        expect(limitedBids.length).to.equal(2);
      });

      it('Sends all bids when enableSendAllBids is true and and bidLimit is set to 0', function () {
        config.setConfig({
          sendBidsControl: {
            bidLimit: 0
          }
        });

        const targeting = targetingInstance.getAllTargeting(['/123456/header-bid-tag-0']);
        const limitedBids = Object.keys(targeting['/123456/header-bid-tag-0']).filter(key => key.indexOf(TARGETING_KEYS.PRICE_BUCKET + '_') !== -1)

        expect(limitedBids.length).to.equal(2);
      });

      it('getHighestCpmBidsFromBidPool calculates bids limit properly when bidLimit is a map', function () {
        const bidLimit


DataExchange(pDX);
	//{{AFX_DATA_MAP(PerformanceConfigDialogClass)
	DDX_Control(pDX, IDC_GEOMETRY_DETAIL_SLIDER, m_GeometrySlider);
	DDX_Control(pDX, IDC_CHAR_SHADOWS_SLIDER, m_CharShadowsSlider);
	DDX_Control(pDX, IDC_TEXTURE_DETAIL_SLIDER, m_TextureDetailSlider);
	DDX_Control(pDX, IDC_SURFACE_DETAIL_SLIDER, m_SurfaceEffectsSlider);
	DDX_Control(pDX, IDC_PERFORMANCE_SLIDER, m_PerformanceSlider);
	DDX_Control(pDX, IDC_PARTICLE_DETAIL_SLIDER, m_ParticleSlider);
	//}}AFX_DATA_MAP
	return ;
}

BEGIN_MESSAGE_MAP(PerformanceConfigDialogClass, CDialog)
	//{{AFX_MSG_MAP(PerformanceConfigDialogClass)
	ON_BN_CLICKED(IDC_EXPERT_CHECK, OnExpertCheck)
	ON_WM_HSCROLL()
	ON_BN_CLICKED(IDC_AUTO_CONFIG_BUTTON, OnGraphicsAutoSetup)
	ON_WM_SHOWWINDOW()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
//
// OnInitDialog
//
//	Modified: 12/06/2001 by	MML	- Retrieving strings from Locomoto file.
//
/////////////////////////////////////////////////////////////////////////////
BOOL
PerformanceConfigDialogClass::OnInitDialog (void)
{
	char string [_MAX_PATH];

	CDialog::OnInitDialog ();

	//
	// Set all the static strings for this dialog.
	//
	SetDlgItemText( IDC_DETAIL,			 Locale_GetString( IDS_DETAIL, string ));
	SetDlgItemText( IDC_LOW_DESC,			 Locale_GetString( IDS_LOW_DESC, string ));
	SetDlgItemText( IDC_HIGH_DESC,		 Locale_GetString( IDS_HIGH_DESC, string ));
	SetDlgItemText( IDC_EXPERT_CHECK,	 Locale_GetString( IDS_EXPERT_MODE, string ));
	SetDlgItemText( IDC_EXPERT_SETTINGS, Locale_GetString( IDS_EXPERT_SETTINGS, string ));

	SetDlgItemText( IDC_AUTO_CONFIG_BUTTON, Locale_GetString( IDS_AUTOCONFIG, string ));

	SetDlgItemText( IDC_GEOMETRY_DETAIL,		 Locale_GetString( IDS_GEOMETRY_DETAIL, string ));
	SetDlgItemText( IDC_CHARACTER_SHADOWS,		 Locale_GetString( IDS_CHARACTER_SHADOWS, string ));
	SetDlgItemText( IDC_TEXTURE_DETAIL,			 Locale_GetString( IDS_TEXTURE_DETAIL, string ));
	SetDlgItemText( IDC_PARTICLE_DETAIL,		 Locale_GetString( IDS_PARTICLE_DETAIL, string ));
	SetDlgItemText( IDC_SURFACE_EFFECT_DETAIL, Locale_GetString( IDS_SURFACE_EFFECT_DETAIL, string ));

	Locale_GetString( IDS_LOW, string );
	SetDlgItemText( IDC_LOW1, string );
	SetDlgItemText( IDC_LOW2, string );
	SetDlgItemText( IDC_LOW3, string );
	SetDlgItemText( IDC_LOW4, string );
	SetDlgItemText( IDC_LOW5, string );

	Locale_GetString( IDS_HIGH, string );
	SetDlgItemText( IDC_HIGH1,	string );
	SetDlgItemText( IDC_HIGH2,	string );
	SetDlgItemText( IDC_HIGH3,	string );
	SetDlgItemText( IDC_HIGH4,	string );
	SetDlgItemText( IDC_HIGH5,	string );

	SetDlgItemText( IDC_LIGHTING_MODE,	Locale_GetString( IDS_LIGHTING_MODE, string ));
	SetDlgItemText( IDC_TEXTURE_FILTER,	Locale_GetString( IDS_TEXTURE_FILTER, string ));

	SetDlgItemText( IDC_TERRAIN_SHADOW_CHECK,	Locale_GetString( IDS_TERRAIN_SHADOWS, string ));

	//
	//	Configure the dialog controls
	//
	Setup_Controls ();
	Load_Valu


tle', 'bottom'],
                  start: ['title', 'end']
                },
                title: {
                  height: '50%',
                  top: ['parent', 'top']
                }
            }
        """),
        modifier = Modifier.fillMaxSize()
    ) {
        Button(
            modifier = Modifier.layoutId("button"),
            onClick = {},
        ) {
            Text(text = stringResource(id = R.string.log_in))
        }
        Text(modifier = Modifier.layoutId("title").background(Color.Red),
            text = "ABC dsa sdfs sdf adfas asdas asdad asdas",// DEF GHI JKL MNO PQR STU VWX YZ ABC DEF",
            style = MaterialTheme.typography.body1,
        )
    }
}

@Preview(group = "VerticalTestBase01")
@Composable
public fun VerticalTestBase04() {
    ConstraintLayout(
        ConstraintSet("""
            {
                Header: { exportAs: 'vbasetest04' },

                button: {
                  height: 'preferWrap',
                  centerVertically: 'parent',
                  top: ['title', 'top'],
                  bottom: ['title', 'bottom'],
                  start: ['title', 'end']
                },
                title: {
                  height: '50%',
                  top: ['parent', 'top']
                }
            }
        """),
        modifier = Modifier.fillMaxSize()
    ) {
        Button(
            modifier = Modifier.layoutId("button"),
            onClick = {},
        ) {
            Text(text = stringResource(id = R.string.log_in))
        }
        Text(modifier = Modifier.layoutId("title").background(Color.Red),
            text = "ABC dsa sdfs sdf adfas asdas asdad asdas",// DEF GHI JKL MNO PQR STU VWX YZ ABC DEF",
            style = MaterialTheme.typography.body1,
        )
    }
}

@Preview(group = "VerticalTestBase01")
@Composable
public fun VerticalTestBase05() {
    ConstraintLayout(
        ConstraintSet("""
            {
                Header: { exportAs: 'vbasetest05' },

                button: {
                  height: { value: 'parent' },
                  start: ['title', 'end']
                },
                title: {
                  height: { value: '32%' },
                  bottom: ['parent', 'bottom']
                }
            }
        """),
        modifier = Modifier.fillMaxSize()
    ) {
        Button(
            modifier = Modifier.layoutId("button"),
            onClick = {},
        ) {
            Text(text = stringResource(id = R.string.log_in))
        }
        Text(modifier = Modifier.layoutId("title").background(Color.Red),
            text = "ABC dsa sdfs sdf adfas asdas asdad asdas",// DEF GHI JKL MNO PQR STU VWX YZ ABC DEF",
            style = MaterialTheme.typography.body1,
        )
    }
}/*
 * Copyright (C) 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.constraintlayout.motion.dsl

import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.tween
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height


+(-1)|0;}}}d=null;}}if(d!==null&&d.bs>1){j=new AMv;Ew(j,k);j.bJ=h;j.k=d;j.a35=h!=2&&h?Kf(d):Kk(d);break a;}j=null;break a;}m=m+1|0;i=G(d,A.AWP);l=Bo(A.AWD);e:{while(true){if(!Bc(l))break e;o=Bb(l);i=i-o.Y3|0;if(i<0){if(!o.a4U(k))break e;if(o===b.bh9)break;j=AMf(o.bgG,c,d,e,f,g,h,k);if(j!==null)break b;}}}}o.GB=o.GB+1|0;b.bh9=o;if(!BkN(o))Ei(A.AWD,o);}}if(j!==null){Eg(c,j);Bj(b.WG,j);}}else j=null;return j;}
function Ig(){return A.AWL;}
function BCl(){var b,c,d;b=N(Pg,11);c=b.data;c[0]=OO(I(VC),40,0);c[1]=OO(I(Uv),5,5);c[2]=OO(I(Pv),20,0);c[3]=OO(I(ACo),20,0);c[4]=OO(I(Ro),10,6);c[5]=OO(I(YA),5,5);c[6]=OO(I(QM),5,5);c[7]=OO(I(Ts),5,4);c[8]=OO(I(TC),5,4);d=new AIn;AO$(d,I(YY),10,2);c[9]=d;d=new AIo;AO$(d,I(Xy),20,1);c[10]=d;A.AWE=b;A.AWP=0;A.AWL=new AXd;}
function Bgc(){H.call(this);}
A.AWR=function(){var a=new Bgc();Cg3(a);return a;};
function Cg3(a){return;}
function Of(b,c,d,e,f,g,h,i){var j,k,l,m,n,o,p,q,r;a:{if(i>50)j=null;else if(B9(e-b.k.bA|0)<=112&&B9(g-b.k.bz|0)<=112){k=i+1|0;j=b.Is;l=0;m=0;n=Bo(j);while(Bc(n)){j=Bb(n);if(j.w2>0&&j.Ko<j.w2)l=1;m=m+j.a03|0;}if(!l)m=(-1);b:{if(m<=0)j=null;else{o=0;c:while(true){if(o>=5){n=Ee(e,f,g,0,0,0,3,4,2,h);if(D$(c,n)!==null)n=null;if(n===null){j=null;break b;}j=A.Yw(b,k,d,n,h);break b;}o=o+1|0;i=G(d,m);n=Bo(b.Is);d:{while(true){if(!Bc(n))break d;p=Bb(n);i=i-p.a03|0;if(i<0){if(!BNQ(p,k))break d;if(p===b.biQ&&b.Is.y>1)break;e:
{q=p.bgI;r=null;if(


(C.lg));p&&Wk(k,"exp",p);Ed()&&(l._cs=bl);var q=f("custom_map");if(ob(q))for(var n in q)if(q.hasOwnProperty(n)&&/^(dimension|metric)\d+$/.test(n)&&void 0!=q[n]){var u=f(String(q[n]));void 0!==u&&Wk(k,n,u)}for(var t=oj(d),r=0;r<t.length;++r){var v=t[r],w=f(v);if(cl.hasOwnProperty(v))Yk(cl[v],v,w,h);else if(Ok.hasOwnProperty(v))Yk(Ok[v],
v,w,k);else if(Nk.hasOwnProperty(v))Yk(Nk[v],v,w,l);else if(/^(dimension|metric|content_group)\d+$/.test(v))Yk(1,v,w,k);else if("developer_id"===v){var y=jb(w);y&&(k["&did"]=y)}else v===C.aa&&0>Ia(t,C.Zb)&&(l.cookieName=w+"_ga")}Wk(l,"cookieDomain","auto");Wk(k,"forceSSL",!0);Wk(h,"eventCategory",el(c));0<=Ia(["view_item","view_item_list","view_promotion","view_search_results"],c)&&Wk(k,"nonInteraction",!0);"login"===c||"sign_up"===c||"share"===c?Wk(h,"eventLabel",f(C.og)):"search"===c||"view_search_results"===
c?Wk(h,"eventLabel",f(C.xg)):"select_content"===c&&Wk(h,"eventLabel",f(C.eg));var x=h[C.ka]||{},A=x[C.ab];A||0!=A&&x[C.I]?l.allowLinker=!0:!1===A&&Wk(l,"useAmpClientId",!1);f(C.Ea)&&(l._useUp=!0);!1!==f(C.dg)&&!1!==f(C.qb)&&Mk()||(k.allowAdFeatures=!1);if(!1===f(C.ia)||!Lk()){var z="allowAdFeatures";z="allowAdPersonalizationSignals";k[z]=!1}l.name=b;k["&gtm"]=sj(!0);k.hitCallback=d.onSuccess;Ed()&&(k["&gcs"]=Od(),Nd(C.J)||(l.storage="none"),Nd(C.B)||(k.allowAdFeatures=!1,l.storeGac=!1));var B=f(C.Da)||f(C.ng)||bf("gtag.remote_config."+a+".url",2),D=f(C.mg)||bf("gtag.remote_config."+a+".dualId",2);if(B&&null!=bd){l._x_19=B;}D&&(l._x_20=D);h.Ha=k;h.Ga=l;return h},
Uk=function(a,b){function c(v){function w(x,A){for(var z=0;z<A.length;z++){var B=A[z];if(v[B]){y[x]=v[B];break}}}var y=m(v);
w("listPosition",["list_position"]);w("creative",["creative_name"]);w("list",["list_name"]);w("position",["list_position","creative_slot"]);return y}function d(v){for(var w=[],y=0;v&&y<v.length;y++)v[y]&&w.push(c(v[y]));return w.length?w:void 0}function e(v){return{id:f(C.yb),affiliation:f(C.ig),revenue:f(C.Fa),tax:f(C.Ce),shipping:f(C.Be),coupon:f(C.jg),list:f(C.Vc)||v}}for(var f=function(v){return b.getWithConfig(v)},h=f(C.V),k,l=0;h&&l<h.length&&


 the Git process.
    pub env: HashMap<OsString, OsString>,
}

impl std::fmt::Debug for GitRunInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(
            f,
            "<GitRunInfo path_to_git={:?} working_directory={:?} env=not shown>",
            self.path_to_git, self.working_directory
        )
    }
}

pub struct GitRunOpts {
    /// If set, a non-zero exit code will be treated as an error.
    treat_git_failure_as_error: bool,
}

impl Default for GitRunOpts {
    fn default() -> Self {
        Self {
            treat_git_failure_as_error: true,
        }
    }
}

pub struct GitRunResult {
    pub exit_code: i32,
    pub stdout: Vec<u8>,
    pub stderr: Vec<u8>,
}

impl std::fmt::Debug for GitRunResult {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(
            f,
            "<GitRunResult exit_code={:?} stdout={:?} stderr={:?}>",
            self.exit_code,
            String::from_utf8_lossy(&self.stdout),
            String::from_utf8_lossy(&self.stderr),
        )
    }
}

impl GitRunInfo {
    fn spawn_writer_thread<
        InputStream: Read + Send + 'static,
        OutputStream: Write + Send + 'static,
    >(
        &self,
        stream: Option<InputStream>,
        mut output: OutputStream,
    ) -> JoinHandle<()> {
        thread::spawn(move || {
            let stream = match stream {
                Some(stream) => stream,
                None => return,
            };
            let reader = BufReader::new(stream);
            for line in reader.lines() {
                let line = line.expect("Reading line from subprocess");
                writeln!(output, "{}", line).expect("Writing line from subprocess");
            }
        })
    }

    fn run_inner(
        &self,
        effects: &Effects,
        event_tx_id: Option<EventTransactionId>,
        args: &[&OsStr],
    ) -> eyre::Result<isize> {
        let GitRunInfo {
            path_to_git,
            working_directory,
            env,
        } = self;

        let args_string = args
            .iter()
            .map(|arg| arg.to_string_lossy().to_string())
            .collect_vec()
            .join(" ");
        let command_string = format!("git {}", args_string);
        let (effects, _progress) =
            effects.start_operation(OperationType::RunGitCommand(Arc::new(command_string)));
        writeln!(
            effects.get_output_stream(),
            "branchless: running command: {} {}",
            &path_to_git.to_string_lossy(),
            &args_string
        )?;

        let mut command = Command::new(path_to_git);
        command.current_dir(working_directory);
        command.args(args);
        command.env_clear();
        command.envs(env.iter());
        if let Some(event_tx_id) = event_tx_id {
            command.env(BRANCHLESS_TRANSACTION_ID_ENV_VAR, event_tx_id.to_string());
        }
        command.stdout(Stdio::piped());
        command.stderr(Stdio::piped());

        let mut child = command.spawn().wrap_err("Spawning Git subprocess")?;

        let stdout = child.stdout.take();
        let stdout_thread = self.spawn_writer_thread(stdout, effects.get_output_stream());
        let stderr = child.stderr.take();
        let stderr_thread = self.spawn_writer_thread(stderr, effects.get_error_stream());

        let exit_status = child
            .wai


// #################  WebServer #################

#ifndef __MODWEBSERVER_H
#define __MODWEBSERVER_H
#define MODWEBSERVER

#include <ESP8266WebServer.h>
#include "Debug.h"
#include "Settings.h"

ESP8266WebServer server (WEBSERVER_PORT);

void returnOK () {
  //--------------
  server.send(200, F("text/plain"), "");
}

void returnFail(String msg) {
  //-------------------------
  server.send(500, F("text/plain"), msg + "\r\n");
}

void handleHelp () {
//-----------------
  String out = "";
  out += "
Hilfe
";
  out += "

";
  out += "
/	zeigt alle Messwerte in einer Tabelle; refresh alle 10 Sekunden
";
  out += "
/data	zum Abruf der Messwerte in der Form Name=wert
";
  out += "
:{port+1}/update	OTA
";
  out += "
/reboot	startet neu
";
  out += "
";
  server.send (200, "text/html", out);
}

void handleReboot () {
  //-------------------
  returnOK ();
  ESP.reset();
}

void handleRoot() {
  //----------------
  String out = "<meta http-equiv=\"refresh\" content=\"10\":URL=\"" + server.uri() + "\">";
  out += "";
  out += "
Hoymiles Micro-Inverter HM-600
";
  out += "

";
  out += "
Kanal	Wert
";
  for (byte i = 0; i < ANZAHL_VALUES; i++) {
    out += "
" +  String(getChannelName(i)) + "	";
    out += "" +  String(VALUES[i]) + "
";
  }
  out += "
";
  out += "";
  server.send (200, "text/html", out);
  //DEBUG_OUT.println (out);
}

void handleData () {
//-----------------
  String out = "";
  for (int i = 0; i < ANZAHL_VALUES; i++) {
    out += String(getChannelName(i)) + '=' + String (VALUES[i]) + '\n';
  }
  server.send(200, "text/plain", out);
}

void handleNotFound() {
//--------------------
  String message  = "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i = 0; i < server.args(); i++) {
    message += " NAME:" + server.argName(i) + "\n VALUE:" + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
}

void setupWebServer (void) {
  //-------------------------
  server.on("/",        handleRoot);
  server.on("/reboot",  handleReboot);
  server.on("/data",    handleData);
  server.on("/help",    handleHelp);
  //server.onNotFound(handleNotFound);    wegen Spiffs-Dateimanager

  server.begin();
  DEBUG_OUT.println ("[HTTP] installed");
}

void webserverHandle() {
//====================
  server.handleClient();
}

// #################  OTA #################

#ifdef WITH_OTA
#include <ESP8266HTTPUpdateServer.h>

ESP8266WebServer httpUpdateServer (UPDATESERVER_PORT);
ESP8266HTTPUpdateServer httpUpdater;

void setupUpdateByOTA () {
  //------------------------
  httpUpdater.setup (&httpUpdateServer, UPDATESERVER_DIR, UPDATESERVER_USER, UPDATESERVER_PW);
  httpUpdateServer.begin();
  DEBUG_OUT.println (F("[OTA] installed"));
}

void checkUpdateByOTA() {
//---------------------
  httpUpdateServer.handleClient();
}
#endif

#endif