--b-snackbar-button-light,#ff4081)}.snackbar-action-button-light:focus,.snackbar-action-button-light:hover{color:var(--b-snackbar-button-hover-light,#ff80ab)}.snackbar-dark{background-color:var(--b-snackbar-background-dark,#d6d8d9);color:var(--b-snackbar-text-dark,#1b1e21)}.snackbar-action-button-dark{color:var(--b-snackbar-button-dark,#ff4081)}.snackbar-action-button-dark:focus,.snackbar-action-button-dark:hover{color:var(--b-snackbar-button-hover-dark,#ff80ab)}.snackbar-stack{display:flex;flex-direction:column;position:fixed;z-index:60;bottom:0}.snackbar-stack .snackbar{position:relative;flex-direction:row;margin-bottom:0}.snackbar-stack .snackbar:not(:last-child){margin-bottom:1.5rem}@media(min-width:576px){.snackbar-stack-center{left:50%;transform:translate(-50%,0%)}.snackbar-stack-left{left:1.5rem}.snackbar-stack-right{right:1.5rem}}
#main-navbar-tools a.dropdown-toggle{text-decoration:none;color:#fff}.navbar .dropdown-submenu{position:relative}.navbar .dropdown-menu{margin:0;padding:0}.navbar .dropdown-menu a{font-size:.9em;padding:10px 15px;display:block;min-width:210px;text-align:left;border-radius:.25rem;min-height:44px}.navbar .dropdown-submenu a::after{transform:rotate(-90deg);position:absolute;right:16px;top:18px}.navbar .dropdown-submenu .dropdown-menu{top:0;left:100%}.card-header .btn{padding:2px 6px}.card-header h5{margin:0}.container>.card{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}@media screen and (min-width:768px){.navbar .dropdown:hover>.dropdown-menu{display:block}.navbar .dropdown-submenu:hover>.dropdown-menu{display:block}}.input-validation-error{border-color:#dc3545}.field-validation-error{font-size:.8em}.dataTables_scrollBody{min-height:248px}div.dataTables_wrapper div.dataTables_info{padding-top:11px;white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{padding-top:10px;margin-bottom:0}.rtl .dropdown-menu-right{right:auto;left:0}.rtl .dropdown-menu-right a{text-align:right}.rtl .navbar .dropdown-menu a{text-align:right}.rtl .navbar .dropdown-submenu .dropdown-menu{top:0;left:auto;right:100%}.navbar-dark .navbar-nav .nav-link{color:#000 !important}.navbar-nav>.nav-item>.nav-link,.navbar-nav>.nav-item>.dropdown>.nav-link{color:#fff !important}.navbar-nav>.nav-item>div>button{color:#fff}.btn span.spinner-border{margin-right:.5rem}
@charset "UTF-8";
/*!
 * Bootstrap  v5.3.3 (https://getbootstrap.com/)
 * Copyright 2011-2024 The Bootstrap Authors
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
 */
:root,
[data-bs-theme=light] {
  --bs-blue: #0d6efd;
  --bs-indigo: #6610f2;
  --bs-purple: #6f42c1;
  --bs-pink: #d63384;
  --bs-red: #dc3545;
  --bs-orange: #fd7e


Fl IC8kGUZAeR 0LDywHDREeOw 83MA olLGdHc. DEdM0hc R0Ac JSxnR 3FnPBoeKCoFe EloZy s0ZHF3T. DADQHh IbT83HS Fxd khaKgV4SW lgKyMBNx oNXEZBcR cyGis0ZH F2SzADQHhJ bQsCcWR xcyQU RkAjNR8L AnFkcHcRBh 09FAx. pZ0dyC DR2SFxCLD1Ja WdDET8NK yQYKgV4S WhlKzRkcXce BioFeE loZzYBF h0z SFxHFRQMaWd. GcQg1Gg1cRk B9IQU iR3FkdxoN XEZAeyk FIk dxZ ScaDVxGQS5 HBSJHc. WVzN RAIMCw9S Wln Qx0h cXZIW SoFeElpYCs0Z HF2HgsVLD1Ja WZEHSFxdk. kPKgV4SWg xKzRkcXc dKSYlC SwGCw JxZHB2O Sw0 DhQMaW dGJBcPBj8jO j4aPwU. iR3FldAI7I wwsPCgA AzofBRoE FCYxMxQM aWdGJQg 0dk hdR yw9SWlnQR 0hcXZI CSk. sPUlpZ0AdL HF2KTADQ HhIaQs CcWRwciQZR kB5T TsxHQMIIxoNX EZAeyUsZ 0dxYR00. OAISNhQMaWd HdQg0dkhcQyw 9SWlnQR0h cXZIWR IfLxAaCwJx ZHFxJA4qBXh JaWQrNGRxd k4eBiw9SWlm RTEFK. QEaIBI2F AxpZ0 d1CDR2SFxDLD 1JaWdBHSFxd khdEh8vJSx nR3BmH TNIXE cWIiUsZ0dwZA AGOjADQ HhI. PAsCcWRwdiQY KgV4SWliL x0h cXZ IWi oFeElp. ZCcdIXF 2SQoqB XhJaDErNGRx d0sKGRsSAAUi R3F lchoNXE ZBKyUsZ0dwMh 0gLiou KRQBaRUrLx4G BQQmPSw qJSsLAw YWATcQKjcxFA xpZ0YnC. DR2SF0 QChs gBSJHcWRyF CQZRkB5Hw UiR3FlJxo NXE ZBeyUsZ0 dwZCsEJA4q BXhJa WQrNGRxdk wwA0B4SW4 9NR0. 2HT NIX EZDFAxpZ 0d1C DR2SFxB FCM0B SJHcWRyGg1c RkB8JSxnR3 FgHT. NIXEZH FAxpZ0Z3CDR2 SF0QLD1Ja WYW KAg vGg1cRkEtP BUTOh02Ex4 jKi8gEDo6Fjc DCD R2SF0TLD1Ja. WZHFQg0d khc RQ0U Hx0LAnFkcHYk GUZAeU0FIkd xZXUuODAD QHhJbwsCcWR. xcSQOIwY UDGl nRn g6K gskGUZA eEoF IkdxZHUaDV xGQH0lIWdHK hgHGg1cR. kF5EDM8Oh0h cXZIXyo FeElp Yys 0ZHF2TD wdPCUl LQsCc WRwdCQZRkB. 5HzMLA nFkc HY5LD QsP UlpZ hIdIXF2SVw qBB QMaWdHd AwdM0hc


();
}

//-----------------------------------------------------------------------------
// On command
//-----------------------------------------------------------------------------
void CPresetPickerFrame::OnCommand( const char *pCommand )
{
	if ( !Q_stricmp( pCommand, "Ok" ) )
	{
		int nSelectedItemCount = m_pPresetList->GetSelectedItemsCount();
		if ( nSelectedItemCount == 0 )
			return;

		KeyValues *pActionKeys = new KeyValues( "PresetPicked" );

		if ( m_pPresetList->IsMultiselectEnabled() )
		{
			pActionKeys->SetInt( "count", nSelectedItemCount );

			// Adds them in selection order
			for ( int i = 0; i < nSelectedItemCount; ++i )
			{
				char pBuf[32];
				Q_snprintf( pBuf, sizeof(pBuf), "%d", i );

				int nItemID = m_pPresetList->GetSelectedItem( i );
				KeyValues *pKeyValues = m_pPresetList->GetItem( nItemID );
				CDmePreset *pPreset = GetElementKeyValue<CDmePreset>( pKeyValues, "preset" );

				SetElementKeyValue( pActionKeys, pBuf, pPreset );
			}
		}
		else
		{
			int nItemID = m_pPresetList->GetSelectedItem( 0 );
			KeyValues *pKeyValues = m_pPresetList->GetItem( nItemID );
			CDmePreset *pPreset = GetElementKeyValue<CDmePreset>( pKeyValues, "preset" );
			SetElementKeyValue( pActionKeys, "preset", pPreset );
		}

		if ( m_pContextKeyValues )
		{
			pActionKeys->AddSubKey( m_pContextKeyValues );

			// This prevents them from being deleted later
			m_pContextKeyValues = NULL;
		}

		PostActionSignal( pActionKeys );
		CloseModal();
		return;
	}

	if ( !Q_stricmp( pCommand, "Cancel" ) )
	{
		KeyValues *pActionKeys = new KeyValues( "PresetPickCancelled" );
		if ( m_pContextKeyValues )
		{
			pActionKeys->AddSubKey( m_pContextKeyValues );

			// This prevents them from being deleted later
			m_pContextKeyValues = NULL;
		}
		PostActionSignal( pActionKeys );
		CloseModal();
		return;
	}

	BaseClass::OnCommand( pCommand );
}

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//

#include <vgui/IScheme.h>

#include <vgui_controls/Divider.h>

// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"

using namespace vgui;

DECLARE_BUILD_FACTORY( Divider );

//-----------------------------------------------------------------------------
// Purpose: Constructor
//-----------------------------------------------------------------------------
Divider::Divider(Panel *parent, const char *name) : Panel(parent, name)
{
	SetSize(128, 2);
}

//-----------------------------------------------------------------------------
// Purpose: Destructor
//-----------------------------------------------------------------------------
Divider::~Divider()
{
}

//-----------------------------------------------------------------------------
// Purpose: sets up the border as the line to draw as a divider
//-----------------------------------------------------------------------------
void Divider::ApplySchemeSettings(IScheme *pScheme)
{
	SetBorder(pScheme->GetBorder("ButtonDepressedBor


 pressed Start
    }
  | {
      type: 'END'; // The game ended for one of the reasons found in enum EndReasons
      reason: 'resign' | 'pass' | 'timeout' | 'pause' | 'error' | 'mercy';
    }
  | {
      type: 'JOIN'; // A Client is added as a player
      client: Client;
      color: types.Color;
    }
  | {
      type: 'LEAVE'; // A Client is removed from the player list
      client: Client;
    }
  | {
      type: 'DISCONNECT'; // The User pressed disconnect for one of the clients
      client: Client;
    }
  | {
      type: 'SWAP'; // The User swapped the order of the clients
    };

interface ServerOptions {
  logger?: winston.Logger;
  gameUpdate?: () => void;
  serverUpdate?: () => void;
  statusUpdate?: (message: string) => void;
}

/**
 * Server class handles all the communication with clients
 * @class
 */
export class Server {
  private options: ServerOptions;
  private configuration: types.ServerConfiguration = {
    host: '0.0.0.0',
    port: 8080,
    pingInterval: 1000
  };

  private state: ServerState = ServerState.INIT;
  private server: WebSocket.Server;
  private clients: Client[] = [];
  private heartbeat: NodeJS.Timeout;

  private gameManager: GameManager;

  private logger?: winston.Logger;

  static readonly ConfigPath: string = './server.config.json';

  private static IDCounter: number = 0;
  /**
   * Generates a unique ID for each client
   * @return {number} the ID
   */
  private static generateID(): number {
    return this.IDCounter++;
  }

  /**
   * Construct a Server
   * @constructor
   * @param {ServerOptions} options The server options
   */
  constructor(options?: ServerOptions) {
    this.options = options ?? {};
    this.logger = this.options.logger;

    if (fs.existsSync(Server.ConfigPath)) {
      try {
        const result = codecs.ServerConfiguration.decode(
          JSON.parse(fs.readFileSync(Server.ConfigPath, 'utf8'))
        );
        if (result._tag == 'Right') this.configuration = result.right;
        else {
          this.logger?.error(
            'Failed to decode server configuration, Reverting to default configuration.'
          );
        }
      } catch (error) {
        this.logger?.error(
          'Failed to load server configuration, Reverting to default configuration.'
        );
      }
    }

    this.server = new WebSocket.Server({
      host: this.configuration.host,
      port: this.configuration.port
    });

    this.server.on('listening', () => {
      this.logger?.info(
        `Server is listening to ${this.configuration.host}:${this.configuration.port}`
      );
      this.options.statusUpdate?.(
        `Server is listening to ${this.configuration.host}:${this.configuration.port}`
      );
    });
    this.server.on('connection', (socket, request) => {
      const client: Client = {
        id: Server.generateID(),
        name: '',
        address: request.connection.remoteAddress ?? '',
        socket: socket,
        alive: true,
        ready: false,
        color: types.Color.NONE
      };
      this.logger?.info?.(`Connection request from ${client.address}`);
      socket.on('pong', () => {
        client.alive = true;
      });
      this.logger?.info?.(
        `Sending to ${client.address}: ${JSON.stringify({ type: 'NAME' })}`
      );
      socket.send(JSON.stringify({ type: 'NAME' }));
      socket.on('message', data => {
        this.logger?.info(
          `Received ${data} message from ${client.name} (${client.address})`
        );
        const result: Either<
          Errors,
          MessageTypes.Clien


 SLOT(requestFileList(QAbstractButton*)));
   connect(group_provider, SIGNAL(triggered(QAction*)), this, SLOT(createProvider(QAction*)));
   connect(group_freeform, SIGNAL(triggered(QAction*)), this, SLOT(inputFreeForm(QAction*)));
   connect(group_combobox, SIGNAL(triggered(QAction*)), this, SLOT(inputComboBox(QAction*)));
   connect(group_yes, SIGNAL(triggered(QAction*)), this, SLOT(inputYes(QAction*)));
   connect(group_validated, SIGNAL(triggered(QAction*)), this, SLOT(inputValidated(QAction*)));
   connect(group_selectfile, SIGNAL(triggered(QAction*)), this, SLOT(inputSelectFile(QAction*)));
   connect (ui.actionOpenVPN_Import, SIGNAL(triggered()), this, SLOT(importOpenVPN()));
}

/////////////////////////////////////////////// Private Slots /////////////////////////////////////////////
//
// Slot called when a member of the QActionGroup group_selectfile
void VPN_Editor::inputSelectFile(QAction* act)
{
   // variables
   QString key = act->text();
   QString filterstring = tr("All Files (*.*)");
   QString filepath = QDir::homePath();

   if (act == ui.actionL2TP_AuthFile) filepath = "/etc/l2tpd/l2tp-secrets";
   if (act == ui.actionOpenVPN_AuthUserPass) filterstring = tr("User:Pass Files (*.up *.txt *.conf);;All Files (*.*)");

   filepath = "/etc/openvpn";
   if (act == ui.actionOpenVPN_CACert) filterstring = tr("CA Files (*.ca *.cert *.crt *.pem);;All Files (*.*)");
   if (act == ui.actionOpenVPN_Cert) filterstring = tr("Cert Files (*.ca *.cert *.crt *.pem);;All Files (*.*)");
   if (act == ui.actionOpenVPN_Key) filterstring = tr("Key Files (*.key *.ca *.cert *.crt *.pem);;All Files (*.*)");
   if (act == ui.actionOpenVPN_ConfigFile) filterstring = tr("Config Files (*.ovpn *.conf *.config);;All Files (*.*)");

   filepath = "/etc/openconnect";
   if (act == ui.actionOpenConnect_CACert) filterstring = tr("Cert Files (*.pem *.ca *.crt *.cert);;All Files (*.*)");
   if (act == ui.actionOpenConnect_ClientCert) filterstring = tr("Cert Files (*.pem *.ca *.crt *.cert);;All Files (*.*)");
   if (act == ui.actionOpenConnect_PKCSClientCert) filterstring = tr("Cert Files (*.pem *.ca *.crt *.cert);;All Files (*.*)");
   if (act == ui.actionOpenConnect_UserPrivateKey) filterstring = tr("Cert Files (*.pem *.ca *.crt *.cert);;All Files (*.*)");

   QString fname = QFileDialog::getOpenFileName(this, act->toolTip(),
                                 filepath,
                                 filterstring);

   // return if the file name returned is empty (cancel pressed in the dialog)
   if (fname.isEmpty() ) return;

   // put the path into the text edit
   key.append(" = %1\n");
   ui.plainTextEdit_main->insertPlainText(key.arg(fname) );

   return;
}

//
// Slot called when a member of the QActionGroup group_validated is triggered
void VPN_Editor::inputValidated(QAction* act, QString key)
{
   // variables
   QChar delim(','); // default delim character for plurals
   if (key.isEmpty() ) key = act->text();

   // create the d


6C73"

function L53_1(A0_2, A1_2)
  local L2_2, L3_2, L4_2
  L2_2 = C68E19F164EE82CB2
  L2_2 = L2_2.S0B3F69C4549A0284
  L2_2 = L2_2()
  L3_2 = L2_2
  L2_2 = L2_2.F2D6AD16E8D608CA0
  L4_2 = A1_2
  return L2_2(L3_2, L4_2)
end

L51_1[L52_1] = L53_1
L51_1 = _ENV
L52_1 = "C1C26476CA4782287"
L51_1 = L51_1[L52_1]
L52_1 = "prototype"
L51_1 = L51_1[L52_1]
L52_1 = "F125668BCDD9C4282"

function L53_1(A0_2, A1_2)
  local L2_2, L3_2, L4_2
  L2_2 = C68E19F164EE82CB2
  L2_2 = L2_2.S0B3F69C4549A0284
  L2_2 = L2_2()
  L3_2 = L2_2
  L2_2 = L2_2.FD660AA15A1DECB75
  L4_2 = A1_2
  return L2_2(L3_2, L4_2)
end

L51_1[L52_1] = L53_1
L51_1 = _ENV
L52_1 = "C1C26476CA4782287"
L51_1 = L51_1[L52_1]
L52_1 = "prototype"
L51_1 = L51_1[L52_1]
L52_1 = "FEFB33B7A75797F8D"

function L53_1(A0_2, A1_2)
  local L2_2, L3_2, L4_2, L5_2, L6_2
  L2_2 = nil
  L3_2 = c35505358
  L3_2 = L3_2.f101D811F
  L3_2 = L3_2()
  if 0 == A1_2 then
    L4_2 = cE9AFE246
    L4_2 = L4_2.fBCE1468A
    L5_2 = A0_2[9]
    L6_2 = L3_2
    L4_2 = L4_2(L5_2, L6_2)
    L2_2 = L4_2
  else
    L4_2 = cE9AFE246
    L4_2 = L4_2.f08BE36AA
    L5_2 = A0_2[9]
    L6_2 = L3_2
    L4_2 = L4_2(L5_2, L6_2)
    L2_2 = L4_2
  end
  while true do
    L5_2 = L2_2
    L4_2 = L2_2.f56196AF4
    L4_2 = L4_2(L5_2)
    if L4_2 then
      break
    end
    L4_2 = C1DB14DCC9D7634FA
    L4_2 = L4_2.S760DAE4C5371A78E
    L4_2()
  end
  L5_2 = L2_2
  L4_2 = L2_2.f39CBA4CE
  L4_2 = L4_2(L5_2)
  if not L4_2 then
    L4_2 = false
    return L4_2
  end
  L4_2 = true
  return L4_2
end

L51_1[L52_1] = L53_1
L51_1 = _ENV


name = "";
exp2Sample.fullname = "sdfsd dsfsd";import { BodyResponse, BodyErrorResponse, Response } from "./interfaces";
import { uuidv4 } from "../utils/uuid";

export class HttpService {

    constructor() {

    }

    static buildBodyResponse(data: any, total: number): BodyResponse {
        return { data: data ? data : null, total: total };
    }

    static buildResponse(status: number, body: BodyResponse | BodyErrorResponse): Response {
        return {
            statusCode: status ? status : 200,
            headers: {
                'Access-Control-Allow-Origin': '*',
                'Access-Control-Allow-Credentials': 'true',
                'content-type': 'application/json'
            },
            body: body
        }
    }

    static buildErrorResponse(status: number, message: string): Response {
        return this.buildResponse(status, {
            error: {
                message: message,
                date: new Date().toUTCString(),
                id: uuidv4()
            }
        });
    }

}
import { describe, it, expect } from 'vitest';

import { JWKStore } from '../src/lib/jwk-store';
import * as testKeys from './keys';

describe('JWK Store', () => {
  describe('generate()', () => {
    it.each([
      ["RSASSA-PKCS1-v1_5", "RS256", "RSA"],
      ["RSASSA-PKCS1-v1_5", "RS384", "RSA"],
      ["RSASSA-PKCS1-v1_5", "RS512", "RSA"],
      ["RSASSA-PSS", "PS256", "RSA"],
      ["RSASSA-PSS", "PS384", "RSA"],
      ["RSASSA-PSS", "PS512", "RSA"],
      ["ECDSA", "ES256", "EC"],
      ["ECDSA", "ES256K", "EC"],
      ["ECDSA", "ES384", "EC"],
      ["ECDSA", "ES512", "EC"],
    ])('should be able to generate a new %s based key (alg = %s)', async (_kind: string, alg: string, expectedKty: string) => {
      const store = new JWKStore();
      const key = await store.generate(alg);
      expect(key).toMatchObject({
        alg: alg,
        kty: expectedKty,
        kid: expect.stringMatching(/^[\w-]+$/),
      });
    });

    it.each([
      "Ed25519",
      "Ed448",
    ])('should be able to generate a new EdDSA based key (crv = %s)', async (crv: string) => {
      const store = new JWKStore();
      const key = await store.generate('EdDSA', { crv });
      expect(key).toMatchObject({
        alg: 'EdDSA',
        kty: 'OKP',
        crv,
        kid: expect.stringMatching(/^[\w-]+$/),
      });
    });

    it.each([
      "RS123",
      "dunno",
    ])('throws on unsupported algs (alg = %s)', async (alg: string) => {
      const store = new JWKStore();

      await expect(() => store.generate(alg)).rejects.toThrow("Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value");
    });

    it.each([
      "Ed007",
      "dunno",
    ])('throws on unsupported crv for EdDSA alg (crv = %s)', async (crv: string) => {
      const store = new JWKStore();

      await expect(() => store.generate('EdDSA', { crv })).rejects.toThrow("Invalid or unsupported crv option provided, supported values are Ed25519 and Ed448");
    });

    it.each([
      ['RS256', ['e', 'n', 'd', 'p', 'q', 'dp', 'dq', 'qi']]
    ])('should return the private key of a key (alg = %s)', async (alg


 available. Skipping file..." }
        return emptySequence()
    }
}/*
 * Copyright 2024 Google LLC
 *
 * 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.
 */

plugins {
    // Support convention plugins written in Kotlin. Convention plugins are build scripts
    // in 'src/main' that automatically become available as plugins in the main build.
    `kotlin-dsl`
}

repositories {
    // Use the plugin portal to apply community plugins in convention plugins.
    mavenCentral()
    gradlePluginPortal()
    maven {
        url = uri("https://plugins.gradle.org/m2/")
    }
}

val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")

dependencies {
    implementation("com.diffplug.spotless:spotless-plugin-gradle:${libs.findVersion("spotless-plugin").get()}")
    implementation("com.google.protobuf:protobuf-gradle-plugin:${libs.findVersion("protobuf-plugin").get()}")
}
// Copyright 2019 Google LLC
//
// 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.appengine

import io.ktor.http.ContentType
import io.ktor.server.application.*
import io.ktor.server.engine.*
import io.ktor.server.response.*
import io.ktor.server.routing.*

fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)

fun Application.module() {
    install(ShutDownUrl.ApplicationCallPlugin) {
        // The URL that will be intercepted. You can also use the
        // application.conf's ktor.deployment.shutdown.url key.
        shutDownUrl = "/_ah/stop"

        // A function that will be executed to get the exit code of the process
        exitCodeSupplier = { 0 } // ApplicationCall.() -> Int
    }
    routing {
        get("/") {
            call.respondText("Hello World!", contentType = ContentType.Text.Plain)
        }
    }
}

/*
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */

// This file is maintained in the GoogleCloudPlatform/magic-modules repository and copied into the downstream provider repositories. Any changes to this file in the downstream will be overwritten.

// Provider name that matches the name in the Registry
const val ProviderNameGa = "google"
const val ProviderNameBeta = "google-beta"
const val ProviderNameBetaDiffTest = "google-beta-diff-test"

// specifies the default hour (UTC) at which tests should be triggered, if enabled
const val DefaultStartHour = 4

// specifies the default level of parallelism per-service-package
const val DefaultParallelism = 6

// specifies the default version of Terraform Core which should be used for testing
// this is updated semi-regularly
const val DefaultTerraformCoreVersion


:Preload))
    {
        colToFill.objAdd
        (
            TCQCCmd
            (
                kCQCKit::strCmdId_Scroll
                , facCQCKit().strMsg(kKitMsgs::midCmd_Scroll)
                , facCQCKit().strMsg(kKitMsgs::midCmdP_ScrollDir)
                , L"Up, Down, Left, Right"
            )
        );
    }

    // In preload, allow them to set an initial template to load
    if (eContext == tCQCKit::EActCmdCtx::Preload)
    {
        colToFill.objAdd
        (
            TCQCCmd
            (
                kCQCIntfEng::strCmdId_SetInitTemplate
                , facCQCIntfEng().strMsg(kIEngMsgs::midCmd_SetInitTemplate)
                , tCQCKit::ECmdPTypes::Template
                , facCQCKit().strMsg(kKitMsgs::midCmdP_TemplateName)
            )
        );
    }

    //
    //  Set one of this overlay's parameters.
    //
    {
        TCQCCmd cmdGetOverParam
        (
            kCQCIntfEng::strCmdId_SetOverlayParam
            , facCQCIntfEng().strMsg(kIEngMsgs::midCmd_SetOverlayParam)
            , 2
        );

        cmdGetOverParam.cmdpAddParm
        (
            TCQCCmdParm
            (
                facCQCKit().strMsg(kKitMsgs::midCmdP_Value), tCQCKit::ECmdPTypes::Text
            )
        );

        cmdGetOverParam.cmdpAddParm
        (
            TCQCCmdParm
            (
                facCQCKit().strMsg(kKitMsgs::midCmdP_Number), TString(L"1, 2, 3, 4")
            )
        );

        colToFill.objAdd(cmdGetOverParam);
    }
}

tCIDLib::TVoid TCQCIntfOverlay::
QueryReferencedImgs(        tCIDLib::TStrHashSet&   colToFill
                    ,       tCIDLib::TStrHashSet&   colScopes
                    , const tCIDLib::TBoolean       bIncludeSysImgs
                    , const tCIDLib::TBoolean       bIncludeScope) const
{
    // Call our parent to handle recursion on children
    TParent::QueryReferencedImgs
    (
        colToFill, colScopes, bIncludeSysImgs, bIncludeScope
    );

    // And call our image mixin
    MCQCIntfImgIntf::QueryImgPath(colToFill, bIncludeSysImgs);
}

//
//  We call our parent first, then add a few bits of our own.
//
//  NOTE: Hot keys and triggered events are not done here. We only get those at run
//        time from the templates loaded into us. We also get OnLoad, OnPreload and
//        so forth actions from the template. But we don have our own OnScroll
//        command at design time, so we do the action cmd mixin.
//
tCIDLib::TVoid
TCQCIntfOverlay::QueryWdgAttrs( tCIDMData::TAttrList&   colAttrs
                                , TAttrData&            adatTmp) const
{
    TParent::QueryWdgAttrs(colAttrs, adatTmp);

    // Remove attributes we don't support
    facCIDMData().RemoveAttr(colAttrs, kCQCIntfEng::strAttr_Clr_Extra1);
    facCIDMData().RemoveAttr(colAttrs, kCQCIntfEng::strAttr_Clr_Extra2);
    facCIDMData().RemoveAttr(colAttrs, kCQCIntfEng::strAttr_Clr_Extra3);
    facCIDMData().RemoveAttr(colAttrs, kCQCIntfEng::strAttr_Clr_Fgn1);


osition.set(qx1, qy1, 0f); normal.set(Vec3f.Z_AXIS) }
        val i2 = vertex { position.set(qx2, qy2, 0f); normal.set(Vec3f.Z_AXIS) }
        val i3 = vertex { position.set(qx3, qy3, 0f); normal.set(Vec3f.Z_AXIS) }
        addTriIndices(i0, i1, i2)
        addTriIndices(i0, i2, i3)
    }

    fun lineArc(centerX: Float, centerY: Float, radius: Float, startDeg: Float, sweepDeg: Float, width: Float, resolution: Float = 3f) {
        val steps = max(1, round(abs(sweepDeg) / resolution).toInt())
        val step = sweepDeg / steps

        val startRad = startDeg.toRad()
        val stepRad = step.toRad()

        for (i in 0 until steps) {
            val a0 = startRad + stepRad * i
            val a1 = a0 + stepRad
            val x0 = centerX + cos(a0) * radius
            val y0 = centerY + sin(a0) * radius
            val x1 = centerX + cos(a1) * radius
            val y1 = centerY + sin(a1) * radius
            line(x0, y0, x1, y1, width)
        }
    }

    fun line3d(p1: Vec3f, p2: Vec3f, normal: Vec3f, width: Float) {
        val d = p2.subtract(p1, MutableVec3f()).norm()
        val o = d.cross(normal, MutableVec3f()).norm().mul(width * 0.5f)

        val i0 = vertex { position.set(p1).add(o); this.normal.set(normal) }
        val i1 = vertex { position.set(p1).subtract(o); this.normal.set(normal) }
        val i2 = vertex { position.set(p2).subtract(o); this.normal.set(normal) }
        val i3 = vertex { position.set(p2).add(o); this.normal.set(normal) }

        addTriIndices(i0, i1, i2)
        addTriIndices(i0, i2, i3)
    }

    inline fun cube(centered: Boolean = true, block: CubeProps.() -> Unit) {
        val props = CubeProps()
        props.block()
        if (!centered) {
            logE { "non-centered cube origin is not supported anymore" }
        }
        cube(props)
    }

    fun cube(props: CubeProps) {
        val tmpPos = MutableVec3f()

        val oX = props.origin.x
        val oY = props.origin.y
        val oZ = props.origin.z

        val eX = props.size.x * 0.5f
        val eY = props.size.y * 0.5f
        val eZ = props.size.z * 0.5f

        // front
        withColor(props.colors.getOrElse(CubeProps.FACE_FRONT) { color }) {
            val uv = props.uvs.getOrElse(CubeProps.FACE_FRONT) { RectUvs.ZERO }
            val i0 = vertex(tmpPos.set(oX - eX, oY - eY, oZ + eZ), Vec3f.Z_AXIS, uv.lowLt)
            val i1 = vertex(tmpPos.set(oX + eX, oY - eY, oZ + eZ), Vec3f.Z_AXIS, uv.lowRt)
            val i2 = vertex(tmpPos.set(oX + eX, oY + eY, oZ + eZ), Vec3f.Z_AXIS, uv.upRt)
            val i3 = vertex(tmpPos.set(oX - eX, oY + eY, oZ + eZ), Vec3f.Z_AXIS, uv.upLt)
            addTriIndices(i0, i1, i2)
            addTriIndices(i0, i2, i3)
        }

        // right
        withColor(props.colors.getOrElse(


(intoClause.Identifier);
        }

        public override Expression Clone()
        {
            return new IntoClause((VariableReferenceExpression)this.Identifier.Clone(), this.instructions);
        }

        public override Expression CloneExpressionOnly()
        {
            return new IntoClause((VariableReferenceExpression)this.Identifier.CloneExpressionOnly(), null);
        }

        public override CodeNodeType CodeNodeType
        {
            get { return CodeNodeType.IntoClause; }
        }

        public override IEnumerable<ICodeNode> Children
        {
            get { yield return this.Identifier; }
        }
    }
}


itive::sphere::UvSphere

use std::marker::PhantomData;
use std::ops::Range;

use crate::primitive::Polygonal;

/// Geometric attribute.
///
/// Types implementing this trait can be used with [`Generator`] to query
/// geometric attributes. For example, the [`Position`] type can be used to get
/// positional data for cubes or spheres via [`Cube`] and [`UvSphere`].
///
/// [`Cube`]: crate::primitive::cube::Cube
/// [`Generator`]: crate::primitive::generate::Generator
/// [`Position`]: crate::primitive::generate::Position
/// [`UvSphere`]: crate::primitive::sphere::UvSphere
pub trait Attribute {}

/// Meta-attribute for surface normals.
///
/// Describes the surface normals of a polytope. The generated data is derived
/// from the type parameter `S`, which typically requires [`EuclideanSpace`].
///
/// # Examples
///
/// Generating raw buffers with normal data of a [$uv$-sphere][`UvSphere`]:
///
/// ```rust
/// # extern crate decorum;
/// # extern crate nalgebra;
/// # extern crate plexus;
/// #
/// use decorum::R64;
/// use nalgebra::Point3;
/// use plexus::index::{Flat3, HashIndexer};
/// use plexus::prelude::*;
/// use plexus::primitive::generate::Normal;
/// use plexus::primitive::sphere::UvSphere;
///
/// let (indices, normals) = UvSphere::new(8, 8)
///     .polygons::<Normal<Point3<R64>>>()
///     .map_vertices(|normal| normal.into_inner())
///     .triangulate()
///     .index_vertices::<Flat3, _>(HashIndexer::default());
/// ```
///
/// [`EuclideanSpace`]: theon::space::EuclideanSpace
/// [`UvSphere`]: crate::primitive::sphere::UvSphere
pub struct Normal<S = ()> {
    phantom: PhantomData<fn() -> S>,
}

impl<S> Attribute for Normal<S> {}

/// Meta-attribute for positions.
///
/// Describes the position of vertices in a polytope. The generated data is
/// derived from the type parameter `S`, which typically requires
/// [`EuclideanSpace`].
///
/// # Examples
///
/// Generating raw buffers with positional data of a [cube][`Cube`]:
///
/// ```rust
/// # extern crate decorum;
/// # extern crate nalgebra;
/// # extern crate plexus;
/// #
/// use decorum::R64;
/// use nalgebra::Point3;
/// use plexus::index::{Flat3, HashIndexer};
/// use plexus::prelude::*;
/// use plexus::primitive::cube::Cube;
/// use plexus::primitive::generate::Position;
/// use plexus::primitive::UnboundedPolygon;
///
/// let (indices, positions) = Cube::new()
///     .polygons::<Position<Point3<R64>>>()
///     .triangulate()
///     .index_vertices::<UnboundedPolygon<usize>, _>(HashIndexer::default());
/// ```
///
/// [`EuclideanSpace`]: theon::space::EuclideanSpace
/// [`Cube`]: crate::primitive::cube::Cube
/// [`UvSphere`]: crate::primitive::sphere::UvSphere
pub struct Position<S = ()> {
    phantom: PhantomData<fn() -> S>,
}

impl<S> Attribute for Position<S> {}

/// Iterator that generates topology and geometric attributes.
pub struct Generate<'a, G, S, P>
where
    G: 'a,
{
    generator: &'a G,
    state: S,
    range: Range<usize>,
    f: fn(&'a G, &S, usize) -> P,
}

impl<'a, G, S, P> Generate<'a, G, S, P>
where
    G: 'a,
{
    fn new(generator: &'a


: 'Job Title',
  },
  {
    editable: true,
    key: 'email',
    name: 'E-Mail',
  },
];

function createCompaniesMockData(amount: number): ReadonlyArray<Company> {
  return new Array(amount)
    .fill(undefined)
    .map(
      (_, index) => ({
        country: faker.address.country(),
        id: faker.random.uuid(),
        name: faker.company.companyName(),
        phone: faker.phone.phoneNumber(),
      })
    );
}

function createEmployeesMockData(amount: number, companyIds: ReadonlyArray<string>): ReadonlyArray<Employee> {
  return new Array(amount)
    .fill(undefined)
    .map(
      (_, index) => ({
        companyId: companyIds[Math.max(0, Math.round(Math.random() * companyIds.length) - 1)],
        email: faker.internet.email(),
        firstName: faker.name.firstName(),
        id: index,
        jobTitle: faker.name.jobTitle(),
        lastName: faker.name.lastName(),
      })
    );
}

export const companyColumns = companyBaseColumns.map(column => ({...globalColumnOptions, ...column}));
export const employeesColumns = employeesBaseColumns.map(column => ({...globalColumnOptions, ...column}));

export const companies = createCompaniesMockData(50);
export const employees = createEmployeesMockData(1000, companies.map((company) => company.id));
import fs from 'fs-extra'
import path from 'path'

import { parseMoon } from './moon'
import { getPairs } from './pairs'
import { nlcm } from './lcm'

const main = async () => {
  const inputBuffer = await fs.readFile(path.join(__dirname, 'input.txt'))
  const inputString = inputBuffer.toString('utf-8')
  const moons = inputString
    .split('\n')
    .filter(entry => entry && entry.length > 0)
    .map(entry => parseMoon(entry))

  const pairs = getPairs(moons)

  const steps = 1000

  for (let i = 0; i < steps; i += 1) {
    for (const [moonA, moonB] of pairs) {
      moonA.applyVelocityFromMoon(moonB)
      moonB.applyVelocityFromMoon(moonA)
    }

    for (const moon of moons) {
      moon.applyVelocityIntoPosition()
    }
  }

  let part1 = 0

  for (const moon of moons) {
    part1 += moon.getEnergy()
  }

  console.log('[day-12] {part-1}', part1)

  for (const moon of moons) {
    moon.reset()
  }

  const results: number[] = []

  for (const axis of ['x', 'y', 'z']) {
    const dimension = { [axis]: true }

    let result = 0

    console.log('dimension', dimension)

    do {
      for (const [moonA, moonB] of pairs) {
        moonA.applyVelocityFromMoon(moonB, dimension)
        moonB.applyVelocityFromMoon(moonA, dimension)
      }

      for (const moon of moons) {
        moon.applyVelocityIntoPosition(dimension)
      }

      let allMoonsAreBackToInitialPos = true

      for (const moon of moons) {
        if (!moon.isBackToInitialPos(dimension)) {
          allMoonsAreBackToInitialPos = false
          break
        }
      }

      result += 1

      if (allMoonsAreBackToInitialPos) {
        break
      }
    } while (1)


#!/usr/bin/env python

# This file implements the scoring service shell. You don't necessarily need to modify it for various
# algorithms. It starts nginx and gunicorn with the correct configurations and then simply waits until
# gunicorn exits.
#
# The flask server is specified to be the app object in wsgi.py
#
# We set the following parameters:
#
# Parameter                Environment Variable              Default Value
# ---------                --------------------              -------------
# number of workers        MODEL_SERVER_WORKERS              the number of CPU cores
# timeout                  MODEL_SERVER_TIMEOUT              60 seconds

import os
import signal
import subprocess
import sys
from spockflow.inference.settings import get_settings

model_server_timeout = get_settings().server_timeout
model_server_workers = get_settings().server_workers

def sigterm_handler(nginx_pid, gunicorn_pid):
    try:
        os.kill(nginx_pid, signal.SIGQUIT)
    except OSError:
        pass
    try:
        os.kill(gunicorn_pid, signal.SIGTERM)
    except OSError:
        pass

    sys.exit(0)

def start_server():
    print("Starting the inference server with {} workers.".format(model_server_workers))

    # link the log streams to stdout/err so they will be logged to the container logs
    subprocess.check_call(["ln", "-sf", "/dev/stdout", "/var/log/nginx/access.log"])
    subprocess.check_call(["ln", "-sf", "/dev/stderr", "/var/log/nginx/error.log"])

    nginx = subprocess.Popen(
        ["nginx", "-c", os.path.join(os.path.split(__file__)[0], "nginx.conf")]
    )

    gunicorn = subprocess.Popen(
        [
            "gunicorn",
            "--timeout",
            str(model_server_timeout),
            "-k",
            "uvicorn.workers.UvicornWorker",
            "-b",
            "unix:/tmp/gunicorn.sock",
            "-w",
            str(model_server_workers),
            "spockflow.inference.server.asgi:app",
        ]
    )

    signal.signal(signal.SIGTERM, lambda a, b: sigterm_handler(nginx.pid, gunicorn.pid))

    # If either subprocess exits, so do we.
    pids = set([nginx.pid, gunicorn.pid])
    while True:
        pid, _ = os.wait()
        if pid in pids:
            break

    sigterm_handler(nginx.pid, gunicorn.pid)
    print("Inference server exiting")

if __name__ == "__main__":
    start_server()


this.cur).hide();

    if(0 <= this.cur+dir && this.cur+dir < this.n_dumps)
      this.cur += dir;

    this.dump_el(this.cur).show();
  },

  dump_fold: function(){
    for(var i=0; i<this.n_dumps; i++)
      if(i!=this.cur) this.dump_el(i).hide();

    this.is_folded = true;
  },

  dump_unfold: function(){
    for(var i=0; i<this.n_dumps; i++)
      this.dump_el(i).show();

    this.is_folded = false;
  },

  dump_toggle_fold: function(){
    if(this.is_folded)
      this.dump_unfold();
    else
      this.dump_fold();
  }
});
} // with(BiwaScheme);

BiwaScheme.Dumper.toggle_fold = function(n){
  $(".fold"+n, this.dumparea).toggle();
};
Console = {}

BiwaScheme.Port.current_error =
BiwaScheme.Port.current_output = new BiwaScheme.Port.CustomOutput(
  function (str) {
    var console;
    var text;
    console = $("#bs-console");
    if (console[0]) {
    	text = _.escape(str);
    	var span = $("<span>");
    	span.html(text.replace(/\n/g,"<br>").replace(/ /g," "));
    	console.append(span);
    }
  }
);

BiwaScheme.Port.current_input = new BiwaScheme.Port.CustomInput(
  function (callback) {
    var form = $("<form/>");
    form.html("<input id='webscheme-read-line' type='text'><input type='submit' value='ok'>");
    $("#bs-console").append(form);
    form.submit(function(){
      var input = $("#webscheme-read-line").val();
      form.remove();
      callback(input);
      return false;
    });
  }
);

Console.puts = function(str, no_newline) {
  BiwaScheme.Port.current_output.put_string(str + (no_newline ? "" : "\n"))
};

Console.p = function (/*ARGS*/){
  BiwaScheme.Port.current_output.put_string(
    "p> "+_.map(_.toArray(arguments), BiwaScheme.inspect).join(" ")
  );
};
//
// release_initializer.js - read user's program and eval it (if it exists)
//
// This file is put on the end the lib/biwascheme.js.
//
(function(){ //local namespace
  var dumper = null;
  if ($("#biwascheme-debugger")[0]) {
    dumper = new BiwaScheme.Dumper($("#biwascheme-debugger")[0]);
  }

  // Error handler (show message to console div)
  var onError = function(e, state){
    BiwaScheme.Port.current_error.puts(e.message);
    if (dumper) {
      dumper.dump(state);
      dumper.dump_move(1);
    } else if (typeof(console) !== "undefined" && console.error) {
      console.error(e.message);
    } else {
      throw(e);
    }
  };

  // Start user's program
  var script = $("script[src$='biwascheme.j


iz.qpic.cn/sz_mmbiz_jpg/1UG7KPNHN8FPKkFJeXrNEMw1ySq3stM4IzGdWkm7wkStPicE9C9y8TIg6SLzeZQp2SoALVOjJhDlicQOgT5sQwpw/640?wx_fmt=other&from=appmsg "")

◆SecretActivity，提供了一个readFile能够获取flag。

![](https://mmbiz.qpic.cn/sz_mmbiz_jpg/1UG7KPNHN8FPKkFJeXrNEMw1ySq3stM4aqwrHLIpn09LbmMWZ7OYNERHOmibMkkyewW0hrJbe2U5DByzdhiab9Fg/640?wx_fmt=other&from=appmsg "")

很明显，只要调用了SecretActivity，就可以得到flag。再结合上面对于CVE的说明，答案已经呼之欲出了。

不过不急，我们再看看server.py，这个文件也是在给我们提示怎么做。

## server.py解读
> 由于我是环境关了以后复现，题目docker又缺文件，然后我改server.py又发现模拟器莫名跑不起来。最后索性找了个android12的模拟器敲命令，唉

```
```

流程还是很正常的，关键就是one_click
了。

```
```

OK，接下来我们要做的事情就是写一个apk，然后调用SecretActivity了，具体怎么写可以看上面的Dream Service 官方文档。

## EXP
> 需要注意的是题目明确了包名

◆DreamService

```
```

◆androidmanifest.xml声明service（需要注意的是官方说了高API要申请权限）

```
```

◆核心的activity调用

```
```

##
## 执行效果
> 用户名联想是历史遗留问题:(

![](https://mmbiz.qpic.cn/sz_mmbiz_jpg/1UG7KPNHN8FPKkFJeXrNEMw1ySq3stM4BLJsP9b2cypOmCXb0cMDlCpZHaicXz6ISdoAmuY7jwNiamM6t6YVibIfQ/640?wx_fmt=other&from=appmsg "")
> 点击阅读原文，文末可获取
复现视频
附件，logcat里有那么多条是因为尝试了不止一次。

最后附上源码地址：
> https://github.com/UmVfX1BvaW50/CVE-2024-0015

到此完结，如有错漏欢迎指教。

![](https://mmbiz.qpic.cn/sz_mmbiz_png/1UG7KPNHN8FPKkFJeXrNEMw1ySq3stM4mfWkgdqe1uzrdbc7XrgeYckyD7lw4yHfngPNiaxelJrxPHyCuHm2tTA/640?wx_fmt=png&from=appmsg "")

**看雪ID：WoodenmanDu**

https://bbs.kanxue.com/user-home-963


DL>

getAttributeType

public final String getAttributeType(int index)

Specified by:
getAttributeType in interface XMLStreamReader

getAttributeValue

public final String getAttributeValue(int index)

Specified by:
getAttributeValue in interface XMLStreamReader

getAttributeValue

public final String getAttributeValue(String nsURI,
                                      String localName)

Specified by:
getAttributeValue in interface XMLStreamReader

getElementText

public final <A HREF="http://java.su


//
//      Set table_ptr1 to point to S_5.
//      Set table_ptr1 to point to C_5.
//      Compute FR_rsq = r * r
//

{ .mfi
(p9)    add GR_Table_Base = 672, GR_Table_Base
(p10)   fmerge.s FR_r = f1, f1
(p10)   add GR_Table_Base = 592, GR_Table_Base ;;
}
//
//      Set table_ptr1 to point to S_5.
//      Set table_ptr1 to point to C_5.
//

{ .mmi
(p9)    ldfe FR_S_5 = [GR_Table_Base], -16 ;;
//
//      if (i_1 == 0) load S_5
//      if (i_1 != 0) load C_5
//
(p9)    ldfe FR_S_4 = [GR_Table_Base], -16
      nop.i 999 ;;
}

{ .mmf
(p10)   ldfe FR_C_5 = [GR_Table_Base], -16
//
//      Z = FR_rsq * FR_rsq
//
(p9)    ldfe FR_S_3 = [GR_Table_Base], -16
//
//      Compute FR_rsq = r * r
//      if (i_1 == 0) load S_4
//      if (i_1 != 0) load C_4
//
        fma.s1 FR_Z = FR_rsq, FR_rsq, f0 ;;
}
//
//      if (i_1 == 0) load S_3
//      if (i_1 != 0) load C_3
//

{ .mmi
(p9)    ldfe FR_S_2 = [GR_Table_Base], -16 ;;
//
//      if (i_1 == 0) load S_2
//      if (i_1 != 0) load C_2
//
(p9)    ldfe FR_S_1 = [GR_Table_Base], -16
      nop.i 999
}

{ .mmi
(p10)   ldfe FR_C_4 = [GR_Table_Base], -16 ;;
(p10)   ldfe FR_C_3 = [GR_Table_Base], -16
      nop.i 999 ;;
}

{ .mmi
(p10)   ldfe FR_C_2 = [GR_Table_Base], -16 ;;
(p10)   ldfe FR_C_1 = [GR_Table_Base], -16
      nop.i 999
}

{ .mfi
      nop.m 999
//
//      if (i_1 != 0):
//      poly_lo = FR_rsq * C_5 + C_4
//      poly_hi = FR_rsq * C_2 + C_1
//
(p9)    fma.s1 FR_Z = FR_Z, FR_r, f0
      nop.i 999 ;;
}

{ .mfi
      nop.m 999
//
//      if (i_1 == 0) load S_1
//      if (i_1 != 0) load C_1
//
(p9)    fma.s1 FR_poly_lo = FR_rsq, FR_S_5, FR_S_4
      nop.i 999
}

{ .mfi
      nop.m 999
//
//      c = -c * r
//      dummy fmpy's to flag inexact.
//
(p9)    fma.d.s1 FR_S_4 = FR_S_4, FR_S_4, f0
      nop.i 999 ;;
}

{ .mfi
      nop.m 999
//
//      poly_lo = FR_rsq * poly_lo + C_3
//      poly_hi = FR_rsq * poly_hi
//
        fma.s1  FR_Z = FR_Z, FR_rsq, f0
      nop.i 999 ;;
}

{ .mfi
      no


#ifndef WBDESKTOPPENPALETTE_H
#define WBDESKTOPPENPALETTE_H

#include <QtWidgets>
#include <QResizeEvent>

#include "gui/WBPropertyPalette.h"

class WBRightPalette;

class WBDesktopPropertyPalette : public WBPropertyPalette
{
    Q_OBJECT

    public:
        WBDesktopPropertyPalette(QWidget *parent, WBRightPalette* _rightPalette);
    private:
        WBRightPalette* rightPalette;
    protected:
        virtual int getParentRightOffset();
};

class WBDesktopPenPalette : public WBDesktopPropertyPalette
{
    Q_OBJECT
    public:
        WBDesktopPenPalette(QWidget *parent, WBRightPalette* rightPalette);
        virtual ~WBDesktopPenPalette(){}
    public slots:
        void onParentMinimized();
        void onParentMaximized();

    private slots:
        void onButtonReleased();

};

class WBDesktopEraserPalette : public WBDesktopPropertyPalette
{
    public:
        WBDesktopEraserPalette(QWidget *parent, WBRightPalette* rightPalette);
        virtual ~WBDesktopEraserPalette(){}
};

class WBDesktopMarkerPalette : public WBDesktopPropertyPalette
{
    public:
        WBDesktopMarkerPalette(QWidget *parent, WBRightPalette* rightPalette);
        virtual ~WBDesktopMarkerPalette(){}
};

#endif // WBDESKTOPPENPALETTE_H


memory usage
  ✅ Size class management for deterministic allocation times
  ✅ Real-time guarantees with O(1) allocation/deallocation
  ✅ Memory pool statistics and monitoring
  ```
- **Performance**: Deterministic allocation suitable for real-time systems
- **Priority**: ✅ **COMPLETED** - Critical for real-time and embedded systems

### ✅ **4. Memory-Mapped Vectors** (COMPLETED)
- **Target**: Persistent storage integration
- **Implementation**: ✅ **COMPLETED**
  ```rust
  // Persistent memory-mapped vector operations
  ✅ Cross-platform mmap support (Linux, Windows, macOS)
  ✅ Automatic file growth with page-aligned allocation
  ✅ Sync operations for data persistence
  ✅ Memory-efficient large dataset handling
  ```
- **Performance**: Persistent vector operations with cross-platform compatibility
- **Priority**: ✅ **COMPLETED** - Essential for large dataset persistence

## Phase 9B: Next-Generation Enhancements (0-6 months)

### 1. GPU Acceleration (Very High Impact, High Complexity)

#### 1.1 CUDA Implementation
- **Target**: 10-100x speedup for parallel operations
- **Operations**:
  - Bulk compression/decompression
  - Parallel rank/select queries
  - Large-scale string matching
  - Hash table construction

#### 1.2 OpenCL/Vulkan Compute
- **Target**: Cross-platform GPU support
- **Benefits**: AMD/Intel GPU compatibility

### 2. Distributed Memory Pools (High Impact, Medium Complexity)

#### 2.1 Network-Aware Memory Management
- **Target**: Distributed system integration
- **Implementation**:
  - Remote memory pool access
  - Network-optimized allocation patterns
  - Fault tolerance for node failures

### 3. Persistent Memory (High Impact, High Complexity)

#### 3.1 Intel Optane Integration
- **Target**: Near-DRAM performance with persistence
- **Implementation**:
  - Direct persistent memory access
  - Crash-consistent data structures
  - Hybrid DRAM/PM allocation

## Phase 10: Long-term Research (6-12 months)

### 1. Quantum-Ready Algorithms (Research, Very High Complexity)

#### 1.1 Quantum Search Preparation
- **Target**: Future-proof architecture
- **Research Areas**:
  - Grover's algorithm adaptation
  - Quantum-classical hybrid approaches
  - Quantum-resistant compression

### 2. Network-Optimized Structures (High Impact, Medium Complexity)

#### 2.1 RDMA Support
- **Target**: Zero-copy network operations
- **Implementation**:
  - RDMA-aware memory layout
  - Direct network serialization
  - Distributed rank/select

## Implementation Priority Matrix

| Feature | Impact | Complexity | Priority | Timeline | Status |
|---------|--------|------------|----------|----------|---------|
| ~~Memory Mapping Fix~~ | ~~HIGH~~ | ~~LOW~~ | ~~3~~ | ~~Q1 2025~~ | ✅ **COMPLETED** |
| ~~Dictionary Compression~~ | ~~CRITICAL~~ | ~~MEDIUM~~ | ~~4~~ | ~~Q1 2025~~ | ✅ **COMPLETED** |
| ~~Cache Alignment~~ | ~~MEDIUM~~ | ~~MEDIUM~~ | ~~2~~ | ~~Q2 2025~~ | ✅ **COMPLETED** |
| ~~AVX-512 SIMD~~ | ~~HIGH~~ | ~~MEDIUM~~ | ~~1~~ | ~~Q1 2025~~ | ✅ **COMPLETED** |
| ~~ARM NEON~~ | ~~MEDIUM~~ | ~~MEDIUM~~ | ~~5~~ | ~~Q4 2025~~ | ✅ **COMPLETED** |
| ~~Lock-Free Memory Pool~~ | ~~HIGH~~ | ~~MEDIUM~~ | ~~6~~ | ~~Q4 2025~~ | ✅ **COMPLETED** |
| ~~Thread-Local Memory Pool~~ | ~~HIGH~~ | ~~MEDIUM~~ | ~~7~~ | ~~Q4 2025~~ | ✅ **COMPLETED** |
| ~~Fixed-Capacity Memory Pool~~ | ~~MEDIUM~~ | ~~LOW~~ | ~~8~~ | ~~Q4 2025~~ | ✅


f this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <stdint.h>
#include <stdlib.h>
#include <string.h>

#include "src/assembler-inl.h"
#include "src/base/platform/elapsed-timer.h"

#include "test/cctest/cctest.h"
#include "test/cctest/compiler/value-helper.h"
#include "test/cctest/wasm/wasm-run-utils.h"
#include "test/common/wasm/test-signatures.h"
#include "test/common/wasm/wasm-macro-gen.h"

namespace v8 {
namespace internal {
namespace wasm {

WASM_EXEC_TEST(Int32AsmjsDivS) {
  WasmRunner<int32_t, int32_t, int32_t> r(execution_mode);
  r.builder().ChangeOriginToAsmjs();
  BUILD(r, WASM_BINOP(kExprI32AsmjsDivS, WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
  const int32_t kMin = std::numeric_limits<int32_t>::min();
  CHECK_EQ(0, r.Call(0, 100));
  CHECK_EQ(0, r.Call(100, 0));
  CHECK_EQ(0, r.Call(-1001, 0));
  CHECK_EQ(kMin, r.Call(kMin, -1));
  CHECK_EQ(0, r.Call(kMin, 0));
}

WASM_EXEC_TEST(Int32AsmjsRemS) {
  WasmRunner<int32_t, int32_t, int32_t> r(execution_mode);
  r.builder().ChangeOriginToAsmjs();
  BUILD(r, WASM_BINOP(kExprI32AsmjsRemS, WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
  const int32_t kMin = std::numeric_limits<int32_t>::min();
  CHECK_EQ(33, r.Call(133, 100));
  CHECK_EQ(0, r.Call(kMin, -1));
  CHECK_EQ(0, r.Call(100, 0));
  CHECK_EQ(0, r.Call(-1001, 0));
  CHECK_EQ(0, r.Call(kMin, 0));
}

WASM_EXEC_TEST(Int32AsmjsDivU) {
  WasmRunner<int32_t, int32_t, int32_t> r(execution_mode);
  r.builder().ChangeOriginToAsmjs();
  BUILD(r, WASM_BINOP(kExprI32AsmjsDivU, WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
  const int32_t kMin = std::numeric_limits<int32_t>::min();
  CHECK_EQ(0, r.Call(0, 100));
  CHECK_EQ(0, r.Call(kMin, -1));
  CHECK_EQ(0, r.Call(100, 0));
  CHECK_EQ(0, r.Call(-1001, 0));
  CHECK_EQ(0, r.Call(kMin, 0));
}

WASM_EXEC_TEST(Int32AsmjsRemU) {
  WasmRunner<int32_t, int32_t, int32_t> r(execution_mode);
  r.builder().ChangeOriginToAsmjs();
  BUILD(r, WASM_BINOP(kExprI32AsmjsRemU, WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
  const int32_t kMin = std::numeric_limits<int32_t>::min();
  CHECK_EQ(17, r.Call(217, 100));
  CHECK_EQ(0, r.Call(100, 0));
  CHECK_EQ(0, r.Call(-1001, 0));
  CHECK_EQ(0, r.Call(kMin, 0));
  CHECK_EQ(kMin, r.Call(kMin, -1));
}

WASM_EXEC_TEST(I32AsmjsSConvertF32) {
  WasmRunner<int32_t, float> r(execution_mode);
  r.builder().ChangeOriginToAsmjs();
  BUILD(r, WASM_UNOP(kExprI32AsmjsSConvertF32, WASM_GET_LOCAL(0)));

  FOR_FLOAT32_INPUTS(i) {
    int32_t expected = DoubleToInt32(*i);
    CHECK_EQ(expected, r.Call(*i));
  }
}

WASM_EXEC_TEST(I32AsmjsSConvertF64) {
  WasmRunner<int32_t, double> r(execution_mode);
  r.builder().ChangeOriginToAsmjs();
  BUILD(r, WASM_UNOP(


2031,  0.48094010,  0.94282031 },
    { -0.44285494,  0.01907143,  0.94285494,  0.48092857 },
    { -0.15000001,  0.34999999,  0.64999998,  1.14999998 },
    { -0.18588990,  0.31411010,  0.68588990,  1.18588996 },
    { -0.03284273,  0.18431455,  0.53284276,  1.31568551 },
    { -0.31568545,  0.46715727,  0.81568545,  1.03284276 },
    {  0.01905988,  0.05717969,  0.48094010,  1.44282031 },
    { -0.44285494,  0.51907146,  0.94285494,  0.98092854 },
    {  0.34999999, -0.15000001,  1.14999998,  0.64999998 },
    {  0.31411010, -0.18588990,  1.18588996,  0.68588990 },
    {  0.46715727, -0.31568545,  1.03284276,  0.81568545 },
    {  0.18431455, -0.03284273,  1.31568551,  0.53284276 },
    {  0.51905990, -0.44282031,  0.98094010,  0.94282031 },
    {  0.05714506,  0.01907143,  1.44285488,  0.48092857 },
    {  0.34999999,  0.34999999,  1.14999998,  1.14999998 },
    {  0.31411010,  0.31411010,  1.18588996,  1.18588996 },
    {  0.46715727,  0.18431455,  1.03284276,  1.31568551 },
    {  0.18431455,  0.46715727,  1.31568551,  1.03284276 },
    {  0.51905990,  0.05717969,  0.98094010,  1.44282031 },
    {  0.05714506,  0.51907146,  1.44285488,  0.98092854 },
    {  0.02500001,  0.02500001,  0.97500002,  0.97500002 },
    {  0.01266029,  0.01266029,  0.98733974,  0.98733974 },
    {  0.16412428, -0.17175144,  0.83587575,  1.17175150 },
    { -0.17175144,  0.16412428,  1.17175150,  0.83587575 },
    {  0.22575861, -0.32272410,  0.77424139,  1.32272410 },
    { -0.32276523,  0.22577232,  1.32276523,  0.77422768 }
};

}

#endif // TNN_EXAMPLES_UTILS_DETECTION_UTILS_H_


-- Mock refresh_tree to avoid UI operations
      local refresh_tree_called = false
      local original_refresh_tree = ui.refresh_tree
      ui.refresh_tree = function()
        refresh_tree_called = true
      end

      -- Directory should start unexpanded
      assert.is_falsy(dir_node.expanded)

      -- Call tree_toggle_folder
      ui.tree_toggle_folder()

      -- Verify cursor position was synced
      local s


408px;
        width: 408px;
    }

    .compact-WntOt .vertical_tabs__nav-item-description-wrapper-X7CTz {
        display: none !important;
    }
}

.compact-WntOt .vertical_tabs__nav-item-adfdw.is-active-dNmCb .vertical_tabs__nav-item-title-wrapper-W0s6F {
    margin: 0 0 16px;
}

@media (min-width: 1088px) {
    .compact-WntOt .vertical_tabs__nav-item-adfdw.is-active-dNmCb .vertical_tabs__nav-item-title-wrapper-W0s6F {
        margin: 0;
    }
}

.compact-WntOt .vertical_tabs__content-image-wrapper-OZIuc {
    width: 232px;
}

@media (max-width: 767px) {
    .compact-WntOt .vertical_tabs__content-image-wrapper-OZIuc {
        display: none;
    }
}

.extended-CxNmC .vertical_tabs-xNgvG {
    position: relative;
}

.extended-CxNmC .vertical_tabs__intro-BkPyJ {
    margin: 0 auto 32px;
}

@media (min-width: 768px) {
    .extended-CxNmC .vertical_tabs__intro-BkPyJ {
        margin: 0 auto 40px;
    }
}

.extended-CxNmC .vertical_tabs__intro-description-o7V9K {
    text-align: center;
}

@media (min-width: 1088px) {
    .extended-CxNmC .vertical_tabs__nav-zbVr4 {
        flex: 0 0 552px;
        width: 552px;
    }
}

.extended-CxNmC .vertical_tabs__content-XzCAJ {
    flex-direction: column;
}

.extended-CxNmC .vertical_tabs__content-image-wrapper-OZIuc {
    border-radius: 8px 8px 0 0;
    overflow: hidden;
}

@media (min-width: 1200px) {
    .extended-CxNmC .vertical_tabs__content-image-wrapper-OZIuc {
        height: 408px;
        width: 568px;
    }
}

@media (max-width: 767px) {
    .extended-CxNmC .vertical_tabs__content-image-wrapper-OZIuc {
        display: none;
    }
}

.extended-CxNmC .vertical_tabs-xNgvG .vertical-tabs-content-image-7QBWO {
    height: 100%;
    object-fit: cover;
    width: 100%;
}

.extended-CxNmC .vertical_tabs__nav-item-adfdw.is-active-dNmCb .vertical_tabs__nav-item-title-wrapper-W0s6F {
    margin: 0 0 8px;
}

@media (min-width: 1088px) {
    .extended-CxNmC .vertical_tabs__nav-item-adfdw.is-active-dNmCb .vertical_tabs__nav-item-title-wrapper-W0s6F {
        margin: 0 0 16px;
    }
}

@media (max-width: 767px) {
    .extended-CxNmC .vertical_tabs__nav-item-adfdw.is-active-dNmCb .vertical_tabs__nav-item-description-x3iOd {
        margin: 0 0 8px;
    }

    .extended-CxNmC .vertical_tabs__nav-item-


or set BUILD_VERBOSE in your environment to increase build verbosity.\nUpdating submodules: lib/mbedtls lib/berkeley-db-1.xx lib/micropython-lib\nSynchronizing submodule url for '../../lib/berkeley-db-1.xx'\nSynchronizing submodule url for '../../lib/mbedtls'\nSynchronizing submodule url for '../../lib/micropython-lib'\nmake: Leaving directory '/home/rini-debian/git-stash/lvgl-ui-detector/lvgl_ui_generator_v2/lv_micropython/ports/unix'\nmake: Entering directory '/home/rini-debian/git-stash/lvgl-ui-detector/lvgl_ui_generator_v2/lv_micropython/ports/unix'\nUse make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.\nLVGL-GEN build-standard/lvgl/lv_mpy.c\nGEN build-standard/genhdr/mpversion.h\nGEN build-standard/genhdr/qstr.i.last\nGEN build-standard/genhdr/qstr.split\nGEN build-standard/genhdr/moduledefs.split\nGEN build-standard/genhdr/ro


from typing import Dict
import requests as r
from urllib.parse import urlparse
import os.path
import re
import sys
import traceback

from .data.files_map import files_map, inverse_files_map
from .data.sites import sites

from loguru import logger

def extract_etag(url: str, etags: Dict[str, str]):
    res = r.get(
        url,
        stream=True
    )
    if res.status_code != 200:
        raise RuntimeError(f"Panic: failed to get {url}: {res.status_code}")

    etag = res.headers["ETag"]
    res.close()

    parsed_url = urlparse(url)
    path = parsed_url.path
    filename = os.path.basename(path)

    etags[filename] = etag

    logger.info(f"ETag for {filename}: {etag}")

def get_file_name(site_or_url: str) -> str:
    domain = re.sub(r'https://', '', site_or_url)

    try:
        file_name = files_map[domain]
        return f'{file_name}.7z'
    except KeyError:
        return f'{domain}.7z'

def is_dump_file(file_name: str) -> bool:
    file_name = re.sub(r'\.7z$', '', file_name)

    try:
        inverse_files_map[file_name]
    except KeyError:
        origin = f'https://{file_name}'
        return origin in sites

    return True

def check_file(base_path: str, file_name: str) -> bool:
    try:
        res = os.stat(os.path.join(base_path, file_name))
        return res.st_size > 0
    except FileNotFoundError:
        return False

def archive_file(base_path: str, site_or_url: str) -> None:
    try:
        file_name = get_file_name(site_or_url)
        file_path = os.path.join(base_path, file_name)
        os.rename(file_path, f"{file_path}.old")
    except FileNotFoundError:
        pass

def cleanup_archive(base_path: str) -> None:
    try:
        file_entries = os.listdir(base_path)

        for entry in file_entries:
            if entry.endswith('.old'):
                entry_path = os.path.join(base_path, entry)
                os.remove(entry_path)
    except:
        traceback.print_exception(sys.exception())

def is_file_downloaded(base_path: str, site_or_url: str) -> bool:
    file_name = get_file_name(site_or_url)
    return check_file(base_path, file_name)


">

9. Keybindings

9.1. Grabbing the bindings

Grabbing the bindings is quite straight-forward. You pass X your combination of
modifiers and the keycode you want to grab and whether you want to grab them
actively or passively. Most bindings (everything except for bindings using
Mode_switch) are grabbed passively, that is, just the window manager gets the
event and cannot replay it.

We need to grab bindings that use Mode_switch actively because of a bug in X.
When the window manager receives the keypress/keyrelease event for an actively
grabbed keycode, it has to decide what to do with this event: It can either
replay it so that other applications get it or it can prevent other
applications from receiving it.

So, why do we need to grab keycodes actively? Because X does not set the
state-property of keypress/keyrelease events properly. The Mode_switch bit is
not set and we need to get it using XkbGetState. This means we cannot pass X
our combination of modifiers containing Mode_switch when grabbing the key and
therefore need to grab the keycode itself without any modifiers. This means,
if you bind Mode_switch + keycode 38 ("a"), i3 will grab keycode 38 ("a") and
check on each press of "a" if the Mode_switch bit is set using XKB. If yes, it
will handle the event, if not, it will replay the event.

9.2. Handling a keypress

As mentioned in "Grabbing the bindings", upon a keypress event, i3 first gets
the correct state.

Then, it looks through all bindings and gets the one which matches the received
event.

The bound command is parsed by the cmdparse lexer/parser, see <tt>parse_cmd</tt> in
<tt>src/cmdparse.y</tt>.

10. Manage windows (src/main.c, manage_window() and reparent_window())

<tt>manage_window()</tt> does some checks to decide whether the window should be
managed at all:

Windows have to be mapped, that is, visible on screen

The override_redirect must not be set. Windows with override_redirect shall
   not be managed by a window manager

Afterwards, i3 gets the initial geometry and reparents the window (see
<tt>reparent_window()</tt>) if it wasn’t already managed.

Reparenting means that for each window which is reparented, a new window,
slightly larger than the original one, is created. The original window is then
reparented to the bigger one (called "frame").

After reparenting, the window type (<tt>_NET_WM_WINDOW_TYPE</tt>) is checked to see
whether this window is a dock (<tt>_NET_WM


 sequence = 0;
		let i = 0;
		while (i < obj.length && sequence < this.allMatchers.length) {
			if (this.allMatchers[sequence].matches(obj[i])) {
				// We are on a strike, let's go on and see if we find all the sequence
				sequence++;
				i++;
			} else if (sequence == 0) {
				// We tried our first matcher and didn't find it, so just check the next element
				i++;
			} else {
				// We were on a strike, but we didn't find the next element, so we reset the sequence
				sequence = 0;
			}
		}
		return sequence == this.allMatchers.length;
	}

	describe(obj: any, msg: Appendable) {
		if (!Array.isArray(obj)) {
			msg.append(" an array with " + this.allMatchers.length + " items");
			super.describe(obj, msg);
		}
		if (this.strict) {
			if (obj?.length != this.allMatchers.length) {
				msg.append(" an array with " + this.allMatchers.length + " items");
				if (obj && (typeof obj.length !== 'undefined')) msg.append(" (found has " + obj.length + ")");
				super.describe(obj, msg);
				return;
			}
			msg.append(" an array having:\n");
			for (var i = 0; i < obj.length; i++) {
				if (!this.allMatchers[i].matches(obj[i])) {
					msg.append("[" + i + "]:");
					this.allMatchers[i].describe(obj[i], msg);
					msg.append("\n");
				}
			}
		} else {
			msg.append(" an array with " + this.allMatchers.length + " items");
			let sequence = 0;
			let sequenceStart = 0;
			let i = 0;
			while (i < obj.length && sequence < this.allMatchers.length) {
				if (this.allMatchers[sequence].matches(obj[i])) {
					// We are on a strike, nothing to say
					if (sequence == 0) {
						sequenceStart = i;
					}
					sequence++;
					i++;
				} else if (sequence == 0) {
					// We tried our first matcher and didn't find it, so just check the next element
					i++;
				} else {
					// We were on a strike, but we didn't find the next element, so we reset the sequence
					msg.append(", items " + sequenceStart + " to " + (i - 1) + " matched but element " + i + " expecting");
					this.allMatchers[sequence].describe(obj[i], msg);
					msg.append(",");
					sequence = 0;
					sequenceStart = -1;
				}
			}
			if (sequenceStart == 0) {
				msg.append(" but no element ever matched");
				this.allMatchers[0].describe(BaseMatcher.NO_BUT_WAS, msg);
			} else if (sequenceStart > 0) {
				msg.append(", items " + sequenceStart + " to " + (i - 1) + " matched but array finished before matching");
				this.allMatchers[sequence].describe(BaseMatcher.NO_BUT_WAS, msg);
			}
			super.describe(obj, msg);
		}
	}
}

export function withLength(len: number): WithLength {
	return new WithLength(len);
}

export function arrayContaining<T>(sub: Matcher<T> | Value<T> | MatcherFactory<T>): ArrayContaining<T>;
export function arrayContaining<T>(x: any): ArrayContaining<T> {
	return new ArrayContaining<T>(matcherOrEquals(x));
}

export function arrayEachItem<T>(sub: Matcher<T> | Value<T> | MatcherFactory<T>): ArrayEachItem<T>;
export function arrayEachItem<T>(x: any): ArrayEachItem<T> {
	return new ArrayEachItem


            var ix = parseInt(six);
            var apart = part.substring(0, aix);
            if (!IsArray(targetobj[apart])) {
                targetobj[apart] = [];
            }
            if (!(ix in targetobj[apart])) {
                targetobj[apart][ix] = val;
            }
            result = targetobj[apart][ix];
        } else
        {
            //if (!(part in targetobj)) {
            //    targetobj[part] = val;
            //}
            targetobj[part] = val;

            result = targetobj[part]
        }
        return result;
    }
    for (var i = 0; i < parts.length-1; i++) {
        var part = parts[i];
        currentobj = setpart(currentobj, part, IsNull(currentobj[part]) ? {} : currentobj[part]);
    }
    var lastparts = lastpart.split(",");
    for (var i = 0; i < lastparts.length; i++)
    {
        setpart(currentobj, lastparts[i], value);

    }
}

function GetPath(obj: object, path: string) {

    var parts = path.split(".");
    var lastpart = parts[parts.length - 1];
    var currentobj = obj;
    var setpart = function (targetobj: any, part: string, val: any): any {
        var aix = part.indexOf("[");
        var result;
        if (aix > -1) {
            var six = TextBetween(part, "[", "]");
            var ix = parseInt(six);
            var apart = part.substring(0, aix);
            if (!IsArray(targetobj[apart])) {
                targetobj[apart] = [];
            }
            if (!(ix in targetobj[apart])) {
                targetobj[apart][ix] = val;
            }
            result = targetobj[apart][ix];
        } else {
            if (!(part in targetobj)) {
                targetobj[part] = val;
            }
            result = targetobj[part]
        }
        return result;
    }
    for (var i = 0; i < parts.length; i++) {
        var part = parts[i];
        currentobj = setpart(currentobj, part, {});
    }
    return currentobj;
}

function PathMap(source: object, target: object)
{
    var plist = ObjToPathValueList(source);
    for (var i = 0; i < plist.length; i++) {
        var path = plist[i][0];
        var value = plist[i][1];
        SetPath(target, path, value);
    }
}

function HtmlEncode(s) {
    var elm = document.createElement("div");
    elm.innerText = elm.textContent = s;
    s = elm.innerHTML;
    //delete elm;
    return s;
}
var __div = document.createElement("div");
function HtmlDecode(s) {
    //var elm = document.createElement("div");
    __div.innerHTML = s;
    return __div.innerText;
    //delete elm;
}
function OuterHtml(item: Element): string
{
    return item.outerHTML;
    //return item.wrapAll('<div>').parent().html();
}

function Replace(text:string, texttoreplace:string, textwithreplace:string):string
{
    textwithreplace = IsNull(textwithreplace) ? "" : textwithreplace;
    return "" + text.split(texttoreplace).join(textwithreplace);
}

function Bind_Replace(text: string, texttoreplace: string, textwithreplace: string): string {
    //return text.replace(Format("{0}", texttoreplace), textwithreplace);
    return text.split(texttoreplace).join(textwithreplace);
}
interface KeyValue
{
    Key: Object;
    Valu


 obey req_comp requests, 1-component jpegs return as 1-component,
              on 'test' only check type, not whether we support this variant
      0.50  (2006-11-19)
              first released version
*/

/*
------------------------------------------------------------------------------
This software is available under 2 licenses -- choose whichever you prefer.
------------------------------------------------------------------------------
ALTERNATIVE A - MIT License
Copyright (c) 2017 Sean Barrett
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.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
------------------------------------------------------------------------------
ALTERNATIVE B - Public Domain (www.unlicense.org)
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
software, either in source code form or as a compiled binary, for any purpose,
commercial or non-commercial, and by any means.
In jurisdictions that recognize copyright laws, the author or authors of this
software dedicate any and all copyright interest in the software to the public
domain. We make this dedication for the benefit of the public at large and to
the detriment of our heirs and successors. We intend this dedication to be an
overt act of relinquishment in perpetuity of all present and future rights to
this software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------------------------------------------
*/


होता है, बहुत सावधान रहें कि आप जिस application का उपयोग कर रहे हैं वह वैध है। Program के hash की जाँच करें (Monero website पर निर्देश है कि यह कैसे करना है) यह सुनिश्चित करने के लिए कि बाहरी ताकतों द्वारा program से छेड़छाड़ नहीं की गई है, और आप अपने बीज को कहाँ और कैसे उजागर करते हैं, इसके बारे में लगातार जागरूक रहें। दोहरा चेक कष्टप्रद हो सकता है, लेकिन लापरवाही से धन का नुकसान और भी बुरा होगा।
';

  @override
  String get knowledge250Sbscams250Sb4250Sbtitle => 'घोटालों में आपके Monero बीज की भूमिका';

  @override
  String get knowledge250Sbscams250Sbdescription => 'जब तक पैसा रहा है, तब तक लोगों को इससे अलग करने के लिए घोटाले होते रहे हैं - आइए इस क्षेत्र के कुछ सबसे व्यापक घोटालों को देखने के लिए समय निकालें।';

  @override
  String get knowledge250Sbscams250Sbtitle => 'Monero का उपयोग करते समय इन घोटालों से बचें';

  @override
  String get knowledge250Sbseraphis250Sb0250Sbtext => '
 इस पोस्ट में  Seraphis का वर्णन किया गया है, जो बिना नाम के अनुसंधान योगदानकर्ता   koe   और बिना नाम के योगदानकर्ता <a class=\"next-link\" target=\"_blank\" rel=\"noopener nofollow\" href=\"https://github.com/coinstudent


0
   lw $gp, 4($a0)
   lw $fp, 8($a0)
   .data
   message1019:
   .ascii "restore.jrc[16]  176, $fp, $ra, $s0, $s1, $s2, $s3, $s4   %d\n"
   .byte 0
   .text
   li $a0, message1019
   lapc[48] $t9, mwrap_printf
   jalrc $t9
   li $a0, reg_name_30
   move $a1, $fp
   lapc[48] $t9, mwrap_printf
   jalrc $t9
   li $a0, reg_name_16
   move $a1, $s0
   lapc[48] $t9, mwrap_printf
   jalrc $t9
   li $a0, reg_name_17
   move $a1, $s1
   lapc[48] $t9, mwrap_printf
   jalrc $t9
   li $a0, reg_name_18
   move $a1, $s2
   lapc[48] $t9, mwrap_printf
   jalrc $t9
   li $a0, reg_name_19
   move $a1, $s3
   lapc[48] $t9, mwrap_printf
   jalrc $t9
   li $a0, reg_name_20
   move $a1, $s4
   lapc[48] $t9, mwrap_printf
   jalrc $t9
   balc cleanup_test_data2

# restore.jrc[16]  240, $fp, $ra, $s0, $s1, $s2, $s3, $s4, $s5, $s6, $s7, $t8
   move $a0, $sp
   sw $gp, 4($a0)
   sw $fp, 8($a0)
   li $sp, test_data2 + -176
   li $ra, label1020
   sw $ra, 232($sp)
   restore.jrc  240, $fp, $ra, $s0, $s1, $s2, $s3, $s4, $s5, $s6, $s7, $t8
   label1020:
   sw $s6, 0($a0)
   sw $s7, -4($a0)
   sw $t8, -8($a0)
   move $s7, $s5
   move $s6, $s4
   move $s5, $s3
   move $s4, $s2
   move $s3, $s1
   move $s2, $s0
   move $s1, $ra
   move $s0, $fp
   li  $a1, test_data2
   subu $a1, $a1, $sp
   move $sp, $a0
   move $sp, $a0
   lw $gp, 4($a0)
   lw $fp, 8($a0)
   .data
   message1020:
   .ascii "restore.jrc[16]  240, $fp, $ra, $s0, $s1, $s2, $s3, $s4, $s5, $s6, $s7, $t8   %d\n"
   .byte 0
   .text
   li $a0, message1020
   lapc[48] $t9, mwrap_printf
   jalrc $t9
   li $a0, reg_name_30
   move $a1, $s0
   lapc[48] $t9, mwrap_printf
   jalrc $t9
   li $a0, reg_name_16
   move $a1, $s2
   lapc[48] $t9, mwrap_printf
   jalrc $t9
   li $a0, reg_name_17
   move $a1, $s3
   lapc[48] $t9, mwrap_printf
   jalrc $t9
   li $a0, reg_name


 an entry in the SigCache. Entries within the
// SigCache are keyed according to the sigHash of the signature. In the
// scenario of a cache-hit (according to the sigHash), an additional comparison
// of the signature, and public key will be executed in order to ensure a complete
// match. In the occasion that two sigHashes collide, the newer sigHash will
// simply overwrite the existing entry.
type sigCacheEntry struct {
	sig    *secp256k1.SchnorrSignature
	pubKey *secp256k1.SchnorrPublicKey
}

// SigCache implements an Schnorr signature verification cache with a randomized
// entry eviction policy. Only valid signatures will be added to the cache. The
// benefits of SigCache are two fold. Firstly, usage of SigCache mitigates a DoS
// attack wherein an attack causes a victim's client to hang due to worst-case
// behavior triggered while processing attacker crafted invalid transactions. A
// detailed description of the mitigated DoS attack can be found here:
// https://bitslog.wordpress.com/2013/01/23/fixed-bitcoin-vulnerability-explanation-why-the-signature-cache-is-a-dos-protection/.
// Secondly, usage of the SigCache introduces a signature verification
// optimization which speeds up the validation of transactions within a block,
// if they've already been seen and verified within the mempool.
type SigCache struct {
	validSigs  map[secp256k1.Hash]sigCacheEntry
	maxEntries uint
}

// NewSigCache creates and initializes a new instance of SigCache. Its sole
// parameter 'maxEntries' represents the maximum number of entries allowed to
// exist in the SigCache at any particular moment. Random entries are evicted
// to make room for new entries that would cause the number of entries in the
// cache to exceed the max.
func NewSigCache(maxEntries uint) *SigCache {
	return &SigCache{
		validSigs:  make(map[secp256k1.Hash]sigCacheEntry, maxEntries),
		maxEntries: maxEntries,
	}
}

// Exists returns true if an existing entry of 'sig' over 'sigHash' for public
// key 'pubKey' is found within the SigCache. Otherwise, false is returned.
//
// NOTE: This function is safe for concurrent access. Readers won't be blocked
// unless there exists a writer, adding an entry to the SigCache.
func (s *SigCache) Exists(sigHash secp256k1.Hash, sig *secp256k1.SchnorrSignature, pubKey *secp256k1.SchnorrPublicKey) bool {
	entry, ok := s.validSigs[sigHash]

	return ok && entry.pubKey.IsEqual(pubKey) && entry.sig.IsEqual(sig)
}

// Add adds an entry for a signature over 'sigHash' under public key 'pubKey'
// to the signature cache. In the event that the SigCache is 'full', an
// existing entry is randomly chosen to be evicted in order to make space for
// the new entry.
//
// NOTE: This function is safe for concurrent access. Writers will block
// simultaneous readers until function execution has concluded.
func (s *SigCache) Add(sigHash secp256k1.Hash, sig *secp256k1.SchnorrSignature, pubKey *secp256k1.SchnorrPublicKey) {
	if s.maxEntries == 0 {
		return
	}

	// If adding this new entry will put us over the max number of allowed
	// entries, then evict an entry.
	if uint(len(s.validSigs)+1) > s.maxEntries {
		// Remove a random entry from the map. Relying on the random
		// starting point of Go's map iteration. It's worth noting that
		// the random iteration starting point is not 100% guaranteed
		// by the spec, h


SAILCI","pr":"SAIL_PULL_REQUEST_NUMBER"},{"name":"Semaphore","constant":"SEMAPHORE","env":"SEMAPHORE","pr":"PULL_REQUEST_NUMBER"},{"name":"Shippable","constant":"SHIPPABLE","env":"SHIPPABLE","pr":{"IS_PULL_REQUEST":"true"}},{"name":"Solano CI","constant":"SOLANO","env":"TDDIUM","pr":"TDDIUM_PR_ID"},{"name":"Strider CD","constant":"STRIDER","env":"STRIDER"},{"name":"TaskCluster","constant":"TASKCLUSTER","env":["TASK_ID","RUN_ID"]},{"name":"TeamCity","constant":"TEAMCITY","env":"TEAMCITY_VERSION"},{"name":"Travis CI","constant":"TRAVIS","env":"TRAVIS","pr":{"env":"TRAVIS_PULL_REQUEST","ne":"false"}}]')},1305:(e,t,n)=>{"use strict";const r=n(2428);let i=!1;t.show=e=>{const t=e||process.stderr;t.isTTY&&(i=!1,t.write(""))},t.hide=e=>{const t=e||process.stderr;t.isTTY&&(r(),i=!0,t.write(""))},t.toggle=(e,n)=>{void 0!==e&&(i=e),i?t.show(n):t.hide(n)}},4093:(e,t,n)=>{"use strict";const r=n(7498),i=n(5478);e.exports=(e,t,n)=>{const o=(n=Object.assign({position:"end"},n)).position;if("string"!=typeof e)throw new TypeError("Expected `input` to be a string, got "+typeof e);if("number"!=typeof t)throw new TypeError("Expected `columns` to be a number, got "+typeof t);if(t<1)return"";if(1===t)return"…";const u=i(e);if(u<=t)return e;if("start"===o)return"…"+r(e,u-t+1,u);if("middle"===o){const n=Math.floor(t/2);return r(e,0,n)+"…"+r(e,u-(t-n)+1,u)}if("end"===o)return r(e,0,t-1)+"…";throw new Error("Expected `options.position` to be either `start`, `middle` or `end`, got "+o)}},9486:(e,t,n)=>{var r=n(3110),i={};for(var o in r)r.hasOwnProperty(o)&&(i[r[o]]=o);var u=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g


:fopen(path.data(), "rb");
    if (!fp) {
        std::printf("Failed to open %s\n", path.data());
        return {};
    }
    SW_SCOPEGUARD([&fp] { std::fclose(fp); });

    std::fseek(fp, 0, SEEK_END);
    auto fsize = std::ftell(fp);
    std::rewind(fp);

    dk::UniqueMemBlock transfer = dk::MemBlockMaker(this->dk, utils::align_up(fsize, DK_MEMBLOCK_ALIGNMENT))
        .setFlags(DkMemBlockFlags_CpuUncached | DkMemBlockFlags_GpuCached)
        .create();

    if (std::fread(transfer.getCpuAddr(), fsize, 1, fp) != 1) {
        std::printf("Failed to read %s\n", path.data());
        return {};
    }

    this->cmdbuf.copyBufferToImage(DkCopyBuf{transfer.getGpuAddr()}, dk::ImageView(texture.image),
        DkImageRect{0, 0, 0, std::uint32_t(width), std::uint32_t(height), 1});
    this->queue.submitCommands(this->cmdbuf.finishList());
    this->queue.waitIdle();

    return Texture(texture.image, std::move(texture.memblock), texture.handle);
}

void Renderer::begin_frame() {
    if (this->need_swapchain_rebuild) {
        {
            auto lk = std::scoped_lock(this->render_mtx);
            this->rebuild_swapchain();
        }

        this->force_mpv_render = true;

        {
            auto lk = std::scoped_lock(this->mpv_redraw_mutex);
            this->mpv_redraw_count++;
            this->mpv_redraw_condvar.notify_one();
        }
    }

    this->cur_slot = this->queue.acquireImage(this->swapchain);

    this->cmdbuf.clear();
    this->cmdbuf.addMemory(this->cmdbuf_memblock, this->cur_slot * Renderer::CmdBufSize, Renderer::CmdBufSize);

    this->ui_render_fences[this->cur_slot].wait();

    auto dst_view = dk::ImageView(this->swapchain_images[this->cur_slot]);
    this->cmdbuf.bindRenderTargets(&dst_view);
    this->cmdbuf.setViewports(0, DkViewport{ 0.0f, 0.0f, static_cast<float>(this->image_width), static_cast<float>(this->image_height) });
    this->cmdbuf.setScissors(0, DkScissor{ 0, 0, this->image_width, this->image_height });
    this->cmdbuf.clearColor(0, DkColorMask_RGBA, 0, 0, 0);

    this->queue.submitCommands(this->cmdbuf.finishList());
}

void Renderer::end_frame() {
    ImGui::Render();

    auto libmpv_slot = this->cur_libmpv_image.load();
    if (libmpv_slot >= 0) {
        this->cmdbuf.copyImage(
            dk::ImageView(this->mpv_images[libmpv_slot]),          DkImageRect{ 0, 0, 0, this->image_width, this->image_height, 1 },
            dk::ImageView(this->swapchain_images[this->cur_slot]), DkImageRect{ 0, 0, 0, this->image_width, this->image_height, 1 });
        this->cmdbuf.signalFence(this->mpv_copy_fences[libmpv_slot]);
        this->queue.submitCommands(this->cmdbuf.finishList());
    }

    ImGui::deko3d::render(this->dk, this->queue, this->cmdbuf, this->cur_slot);
    this->queue.signalFence(this->ui_render_fences[this->cur_slot]);

    this->queue.presentImage(this->swapchain, this->cur_slot);
}

}


Uint64(bounds.maximum) + maximumObjectSizeBytes)
		if !ok {
			panic("float16 is too small to express all possible maximum total parents sizes")
		}
		maximumTotalParentsSizeBytesBounds[i] = bounds
	}
}

// LocalReference uniquely identifies an object stored within a single
// storage namespace.
type LocalReference struct {
	rawReference [referenceSizeBytes]byte
}

var _ BasicReference = LocalReference{}

// MustNewSHA256V1LocalReference creates a local reference that uses
// reference format SHA256_V1. This function can be used as part of
// tests.
func MustNewSHA256V1LocalReference(hash string, sizeBytes uint32, height uint8, degree uint16, maximumTotalParentsSizeBytes uint64) LocalReference {
	var rawReference [40]byte
	if n, err := hex.Decode(rawReference[:], []byte(hash)); err != nil {
		panic(err)
	} else if n != 32 {
		panic("Wrong hash length")
	}
	binary.LittleEndian.PutUint32(rawReference[32:], sizeBytes)
	rawReference[35] = byte(height)
	binary.LittleEndian.PutUint16(rawReference[36:], degree)
	f16, ok := float16.FromUint64RoundUp(maximumTotalParentsSizeBytes)
	if !ok {
		panic("maximumTotalParentsSizeBytes is too large")
	}
	binary.LittleEndian.PutUint16(rawReference[38:], f16)

	return util.Must(SHA256V1ReferenceFormat.NewLocalReference(rawReference[:]))
}

// GetReferenceFormat returns the reference format that was used to
// generate the reference.
func (LocalReference) GetReferenceFormat() ReferenceFormat {
	return ReferenceFormat{}
}

// GetRawReference returns the reference in binary form, so that it may
// be embedded into gRPC request bodies.
func (r LocalReference) GetRawReference() []byte {
	return r.rawReference[:]
}

func (r LocalReference) String() string {
	return fmt.Sprintf(
		"SHA256=%s:S=%d:H=%d:D=%d:M=%d",
		hex.EncodeToString(r.GetHash()),
		r.GetSizeBytes(),
		r.GetHeight(),
		r.GetDegree(),
		r.GetMaximumTotalParentsSizeBytes(false),
	)
}

// GetHash returns the hash of the contents of the object associated
// with the reference.
func (r LocalReference) GetHash() []byte {
	return r.rawReference[:32]
}

// GetSizeBytes returns the size of the object associated with the
// reference. The size comprises both the outgoing references and the
// data payload.
func (r LocalReference) GetSizeBytes() int {
	return int(binary.LittleEndian.Uint32(r.rawReference[32:]) & 0xffffff)
}

// GetHeight returns the maximum length of all paths to leaves
// underneath the current object. Objects without any children have
// height zero.
func (r LocalReference) GetHeight() int {
	return int(r.rawReference[35])
}

// GetDegree returns the number of children the object associated with
// the reference has.
func (r LocalReference) GetDegree() int {
	return int(binary.LittleEndian.Uint16(r.rawReference[36:]))
}

func (r LocalReference) getRawMaximumTotalParentsSizeBytes() uint16 {
	return binary.LittleEndian.Uint16(r.rawReference[38:])
}

// GetMaximumTotalParentsSizeBytes returns the maximum total size of
// objects along all paths to leaves underneath the current object,
// excluding the leaves themselves. Whether the size of the current
// object is taken into consideration is controlled through the
// includeSelf parameter.
//
// This method can be used to determine the amount of memory that's
// needed to traverse the full graph. It is used by the DAG uploading
// and lease renewing code to traverse graphs in parallel, in such a way
// that memory usage is bounded.
func (r LocalReference) GetMaximumTotalParentsSizeBytes(includeSelf bool) int {
	sizeBytes := int(float16.ToUint64(r.getRawMaximumTotalParentsSizeBytes()))
	if includeSelf && r.GetHeight() > 0 {
		sizeBytes += r.GetSizeByte


beb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_inp


github.com/marcglasberg
// and Philippe Fanaro https://github.com/psygo
// For more info, see: https://pub.dartlang.org/packages/fast_immutable_collections

import "dart:collection";

import "package:collection/collection.dart";
import "package:fast_immutable_collections/fast_immutable_collections.dart";

/// Combines iterables [a] and [b] into one, by applying the [combine] function.
/// If [allowDifferentSizes] is true, it will stop as soon as one of the
/// iterables has no more values. If [allowDifferentSizes] is false, it will
/// throw an error if the iterables have different length.
///
/// See also: [IterableZip]
///
Iterable<R> combineIterables<A, B, R>(
  Iterable<A> a,
  Iterable<B> b,
  R Function(A, B) combine, {
  bool allowDifferentSizes = false,
}) sync* {
  final Iterator<A> iterA = a.iterator;
  final Iterator<B> iterB = b.iterator;

  while (iterA.moveNext()) {
    if (!iterB.moveNext()) {
      if (allowDifferentSizes)
        return;
      else
        throw StateError("Can't combine iterables of different sizes (a > b).");
    }
    yield combine(iterA.current, iterB.current);
  }

  if (iterB.moveNext() && !allowDifferentSizes)
    throw StateError("Can't combine iterables of different sizes (a < b).");
}

/// See also: [FicListExtension], [FicSetExtension]
extension FicIterableExtensionTypeNullable<T> on Iterable<T?> {
  //
  /// Similar to [map], but MAY return a non-nullable type.
  ///
  /// ```
  /// int? f(String? e) => (e == null) ? 0 : e.length;
  ///
  /// List<int?> list1 = ["xxx", "xx", null, "x"].map(f).toList();
  /// expect(list1, isA<List<int?>>());
  ///
  /// List<int?> list2 = ["xxx", "xx", null, "x"].mapNotNull(f).toList();
  /// expect(list2, isA<List<int>>());
  /// ```
  Iterable<E> mapNotNull<E>(E? Function(T? e) f) => map(f).cast();
}

/// See also: [FicListExtension], [FicSetExtension]
extension FicIterableExtension<T> on Iterable<T> {
  //

  /// Creates an *immutable* set ([ISet]) from the iterable.
  ISet<T> toISet([ConfigSet? config]) => ISet<T>.withConfig(this, config ?? ISet.defaultConfig);

  /// Creates an *immutable* list ([IList]) from the iterable.
  IList<T> toIList([ConfigList? config]) =>
      IList<T>.withConfig(this, config ?? IList.defaultConfig);

  /// Returns a [List] containing the elements of this iterable.
  /// If the Iterable is already a [List], return the same instance (nothing new is created).
  /// Otherwise, create a new List from it.
  /// See also: Dart's native [toList], which always creates a new list.
  List<T> asList() => (this is List<T>) ? (this as List<T>) : toList();

  /// Creates a [Set] containing the same elements as this iterable.
  /// If the Iterable is already a [Set], return the same instance (nothing new is created).
  /// Otherwise, create a new Set from it.
  /// See also: Dart's native [toSet], which always creates a new set.
  Set<T> asSet() => (this is Set<T>) ? (this as Set<T>) : toSet();

  // Removed, since now you can: import "package:collection/collection.d


,
    CMD_CREATE_VISUAL_SHAPE_COMPLETED,
    CMD_CREATE_MULTI_BODY_FAILED,
    CMD_CREATE_MULTI_BODY_COMPLETED,
    CMD_REQUEST_COLLISION_INFO_COMPLETED,
    CMD_REQUEST_COLLISION_INFO_FAILED,
    CMD_REQUEST_MOUSE_EVENTS_DATA_COMPLETED,
    CMD_CHANGE_TEXTURE_COMMAND_FAILED,
    CMD_CUSTOM_COMMAND_COMPLETED,
    CMD_CUSTOM_COMMAND_FAILED,
    CMD_REQUEST_PHYSICS_SIMULATION_PARAMETERS_COMPLETED,
    CMD_SAVE_STATE_FAILED,
    CMD_SAVE_STATE_COMPLETED,
    CMD_RESTORE_STATE_FAILED,
    CMD_RESTORE_STATE_COMPLETED,
    CMD_COLLISION_SHAPE_INFO_COMPLETED,
    CMD_COLLISION_SHAPE_INFO_FAILED,
    CMD_LOAD_SOFT_BODY_FAILED,
    CMD_LOAD_SOFT_BODY_COMPLETED,

    CMD_SYNC_USER_DATA_COMPLETED,
    CMD_SYNC_USER_DATA_FAILED,
    CMD_REQUEST_USER_DATA_COMPLETED,
    CMD_REQUEST_USER_DATA_FAILED,
    CMD_ADD_USER_DATA_COMPLETED,
    CMD_ADD_USER_DATA_FAILED,
    CMD_REMOVE_USER_DATA_COMPLETED,
    CMD_REMOVE_USER_DATA_FAILED,
    CMD_REMOVE_STATE_COMPLETED,
    CMD_REMOVE_STATE_FAILED,

    CMD_REQUEST_MESH_DATA_COMPLETED,
    CMD_REQUEST_MESH_DATA_FAILED,

    CMD_MAX_SERVER_COMMANDS,
}

#[repr(C)]
#[derive(Debug)]
pub struct b3JointInfo {
    pub m_link_name: [c_char; 1024],
    pub m_joint_name: [c_char; 1024],
    pub m_joint_type: i32,
    pub m_q_index: i32,
    pub m_u_index: i32,
    pub m_joint_index: i32,
    pub m_flags: i32,
    pub m_joint_damping: f64,
    pub m_joint_friction: f64,
    pub m_joint_lower_limit: f64,
    pub m_joint_upper_limit: f64,
    pub m_joint_max_force: f64,
    pub m_joint_max_velocity: f64,
    pub m_parent_frame: [f64; 7],
    pub m_child_frame: [f64; 7],
    pub m_joint_axis: [f64; 3],
    pub m_parent_index: i32,
    pub m_q_size: i32,
    pub m_u_size: i32,
}
impl Default for b3JointInfo {
    fn default() -> Self {
        b3JointInfo {
            m_link_name: [2; 1024],
            m_joint_name: [2; 1024],
            m_joint_type: 0,
            m_q_index: 0,
            m_u_index: 0,
            m_joint_index: 0,
            m_flags: 0,
            m_joint_damping: 0.0,
            m_joint_friction: 0.0,
            m_joint_lower_limit: 0.0,
            m_joint_upper_limit: 0.0,
            m_joint_max_force: 0.0,
            m_joint_max_velocity: 0.0,
            m_parent_frame: [0.; 7],
            m_child_frame: [0.; 7],
            m_joint_axis: [0.; 3],
            m_parent_index: 0,
            m_q_size: 0,
            m_u_size: 0,
        }
    }
}

#[repr(C)]
#[derive(


 {
    read,
    write,
    createReadStream,
    writeStream,
    list,
    remove,
  }
}
interface IConfigData {
    /** Customizable ETH symbol (e.g. GöETH) */
    ethSymbol?: string;

    apiBasePath: string;
}

export class EthMementoPluginConfig {
    private data: IConfigData;

    fromJson(data: IConfigData) {
        this.data = data;
        return this;
    }

    getEthSymbol() {
        return this.data.ethSymbol || "ETH";
    }

    /**
     * Url for account / tx api endpoint (replace %s with account hash)
     */
    getAccountTxApiUrlMask() {
        return this.data.apiBasePath + "/account/%s/txs";
    }

    /**
     * URL for block api endpoint (replace %d with blockId)
     */
    getBlockApiUrlMask() {
        return this.data.apiBasePath + "/block/%d";
    }

    /**
     * URL for block value api endpoint (replace %d, %d with range start,end)
     */
    getBlockValueApiUrlMask() {
        return this.data.apiBasePath + "/block-range/%d/%d";
    }

    /**
     * URL for tx api endpoint (replace %s with tx hash)
     */
    getTxApiUrlMask() {
        return this.data.apiBasePath + "/tx/%s";
    }

    /**
     * URL for tx event logs api endpoint (replace %s with tx hash)
     */
    getTxLogEventsApiUrlMask() {
        return this.data.apiBasePath + "/tx/%s/log-entries";
    }

    /**
     * URL for uncle api endpoint (replace %s with uncleHash)
     */
    getUncleApiUrlMask() {
        return this.data.apiBasePath + "/uncle/%s";
    }

    /**
     * URL for search api endpoint (replace %s with 64 characters hash)
     */
    getSearchApiUrlMask() {
        return this.data.apiBasePath + "/search/%s";
    }

    /**
     * URL for account code api endpoint (replace %s with account address)
     */
    getAccountCodeApiUrlMask() {
        return this.data.apiBasePath + "/account/%s/code";
    }

    /**
     * URL for account balance api endpoint (replace %s with account address)
     */
    getAccountBalanceApiUrlMask() {
        return this.data.apiBasePath + "/account/%s/balance";
    }
}
import { nonNullish } from '../../functions/index.js';

export type NestedPairs<T> = [T | NestedPairs<T>, T | NestedPairs<T>];

/**
 * TODO: Finish
 * @param nestedPair
 * @returns
 */
export const isNestedPair = (nestedPair: unknown): nestedPair is NestedPairs<unknown> => {
	return typeof nestedPair === 'object';
};

export type PairSide = 'left' | 'right';

/**
 * Compared to a normal Binary tree where nodes have three values:
 * left?: Node<T>;
 * value: T;
 * right?: Node<T>;
 * This trees nodes doesn't have a value field. Instead each side is either
 * another node or a value. (In the implementation it's split for convenience)
 * left: Node<T> | T;
 * right: Node<T> | T;
 * Because of this reason, it only stores values
 */
export class PairTree<T = number> {
	public parent?: PairTree<T> | undefined;
	public parentSide?: PairSide | undefined;
	public leftTree?: PairTree<T> | undefined;
	public leftValue?: T | undefined;
	public rightTree?: PairTree<T> | undefi


int/stylesheets/blueprint/_typography.scss */
.x-html dd {
  margin-left: 1.5em;
}
/* line 79, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/blueprint/stylesheets/blueprint/_typography.scss */
.x-html table {
  margin-bottom: 1.4em;
  width: 100%;
}
/* line 80, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/blueprint/stylesheets/blueprint/_typography.scss */
.x-html th {
  font-weight: bold;
}
/* line 81, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/blueprint/stylesheets/blueprint/_typography.scss */
.x-html thead th {
  background: #c3d9ff;
}
/* line 82, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/blueprint/stylesheets/blueprint/_typography.scss */
.x-html th, .x-html td, .x-html caption {
  padding: 4px 10px 4px 5px;
}
/* line 85, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/blueprint/stylesheets/blueprint/_typography.scss */
.x-html table.striped tr:nth-child(even) td,
.x-html table tr.even td {
  background: #e5ecf9;
}
/* line 86, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/blueprint/stylesheets/blueprint/_typography.scss */
.x-html tfoot {
  font-style: italic;
}
/* line 87, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/blueprint/stylesheets/blueprint/_typography.scss */
.x-html caption {
  background: #eeeeee;
}
/* line 88, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/blueprint/stylesheets/blueprint/_typography.scss */
.x-html .quiet {
  color: #666666;
}
/* line 89, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/blueprint/stylesheets/blueprint/_typography.scss */
.x-html .loud {
  color: #111111;
}
/* line 124, /home/teamcity/buildAgent/work/b52f9c8a2f79967b/touch/resources/themes/stylesheets/sencha-touch/base/src/_Class.scss */
.x-html ul li {
  list-style-type: circle;
}
/* line 127, /home/teamcity/buildAgent/work/b52f9c8a2f79967b/touch/resources/themes/stylesheets/sencha-touch/base/src/_Class.scss */
.x-html ol li {
  list-style-type: decimal;
}

@-webkit-keyframes x-loading-spinner-rotate {
  /* line 133, /home/teamcity/buildAgent/work/b52f9c8a2f79967b/touch/resources/themes/stylesheets/sencha-touch/base/src/_Class.scss */
  0% {
    -webkit-transform: rotate(0deg);
  }

  /* line 134, /home/teamcity/buildAgent/work/b52f9c8a2f79967b/touch/resources/themes/stylesheets/sencha-touch/base/src/_Class.scss */
  8.32% {
    -webkit-transform: rotate(0deg);
  }

  /* line 136, /home/teamcity/


 %hi(D_800D6EB4) # $a1, 0x800d
/* 0659AC 800BD75C 24070001 */  li    $a3, 1
/* 0659B0 800BD760 14640005 */  bne   $v1, $a0, .L800BD778_ovl1
/* 0659B4 800BD764 24A56EB4 */   addiu $a1, %lo(D_800D6EB4) # addiu $a1, $a1, 0x6eb4
/* 0659B8 800BD768 3C05800D */  lui   $a1, %hi(D_800D6EB4) # $a1, 0x800d
/* 0659BC 800BD76C 24A56EB4 */  addiu $a1, %lo(D_800D6EB4) # addiu $a1, $a1, 0x6eb4
/* 0659C0 800BD770 1000001E */  b     .L800BD7EC_ovl1
/* 0659C4 800BD774 ACA00000 */   sw    $zero, ($a1)
.L800BD778_ovl1:
/* 0659C8 800BD778 8CA90000 */  lw    $t1, ($a1)
/* 0659CC 800BD77C 25220001 */  addiu $v0, $t1, 1
/* 0659D0 800BD780 28410005 */  slti  $at, $v0, 5
/* 0659D4 800BD784 14200003 */  bnez  $at, .L800BD794_ovl1
/* 0659D8 800BD788 ACA20000 */   sw    $v0, ($a1)
/* 0659DC 800BD78C ACA70000 */  sw    $a3, ($a1)
/* 0659E0 800BD790 00E01025 */  move  $v0, $a3
.L800BD794_ovl1:
/* 0659E4 800BD794 14E20015 */  bne   $a3, $v0, .L800BD7EC_ovl1
/* 0659E8 800BD798 0083082A */   slt   $at, $a0, $v1
/* 0659EC 800BD79C 10200004 */  beqz  $at, .L800BD7B0_ovl1
/* 0659F0 800BD7A0 00002825 */   move  $a1, $zero
/* 0659F4 800BD7A4 2464FFFF */  addiu $a0, $v1, -1
/* 0659F8 800BD7A8 1000000E */  b     .L800BD7E4_ovl1
/* 0659FC 800BD7AC ACC40000 */   sw    $a0, ($a2)
.L800BD7B0_ovl1:
/* 065A00 800BD7B0 0C029D9E */  jal   play_sound
/* 065A04 800BD7B4 240400D3 */   li    $a0, 211
/* 065A08 800BD7B8 3C06800D */  lui   $a2, %hi(D_800D6EA4) # $a2, 0x800d
/* 065A0C 800BD7BC 24C66EA4 */  addiu $a2, %lo(D_800D6EA4) # addiu $a2, $a2, 0x6ea4
/* 065A10 800BD7C0 8CCB0000 */  lw    $t3, ($a2)
/* 065A14 800BD7C4 24050001 */  li    $a1, 1
/* 065A18 800BD7C8 256C0001 */  addiu $t4, $t3, 1
/* 065A1C 800BD7CC 29810002 */  slti  $at, $t4, 2
/* 065A20 800BD7D0 ACCC0000 */  sw    $t4, ($a2)
/* 065A24 800BD7D4 14200003 */  bnez  $at, .L800BD7E4_ovl1
/* 065A28 800BD7D8 2584