 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

package test.com.sun.javafx.scene.control.infrastructure;

import javafx.event.Event;
import javafx.event.EventTarget;
import javafx.event.EventType;
import javafx.geometry.BoundingBox;
import javafx.geometry.Bounds;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.PickResult;
import javafx.stage.Window;

import java.util.Arrays;
import java.util.List;

public final class MouseEventFirer {
    private final EventTarget target;

    private final Scene scene;
    private final Bounds targetBounds;
    private StageLoader sl;

    public MouseEventFirer(EventTarget target) {
        this.target = target;

        // Force the target node onto a stage so that it is accessible
        if (target instanceof Node) {
            Node n = (Node)target;
            Scene s = n.getScene();
            Window w = s == null ? null : s.getWindow();

            if (w == null || w.getScene() == null) {
                sl = new StageLoader(n);
                scene = n.getScene();
                targetBounds = n.getLayoutBounds();
            } else {
                scene = w.getScene();
                targetBounds = n.getLayoutBounds();
            }
        } else if (target instanceof Scene) {
            scene = (Scene)target;
            sl = new StageLoader(scene);
            targetBounds = new BoundingBox(0, 0, scene.getWidth(), scene.getHeight());
        } else {
            throw new RuntimeException("EventTarget of invalid type (" + target + ")");
        }
    }

    public void dispose() {
        if (sl != null) {
            sl.dispose();
        }
    }

    public void fireMousePressAndRelease(KeyModifier... modifiers) {
        fireMouseEvent(MouseEvent.MOUSE_PRESSED, modifiers);
        fireMouseEvent(MouseEvent.MOUSE_RELEASED, modifiers);
    }

    public void fireMousePressAndRelease(int clickCount, KeyModifier... modifiers) {
        fireMousePressAndRelease(clickCount, 0, 0, modifiers);
    }

    public void fireMousePressAndRelease(int clickCount, double deltaX, double deltaY, KeyModifier... modifiers) {
        fireMouseEvent(MouseEvent.MOUSE_PRESSED, MouseButton.PRIMARY, clickCount, deltaX, deltaY, modifiers);
        fireMouseEvent(MouseEvent.MOUSE_RELEASED, MouseButton.PRIMARY, clickCount, deltaX, deltaY, modifiers);
    }

    public void fireMouseClicked() {
        fireMouseEvent(MouseEvent.MOUSE_CLICKED);
    }

    public void fireMouseClicked(MouseButton button) {
        fireMouseEvent(MouseEvent.MOUSE_CLICKED, button, 0, 0);
    }

    public void fireMouseClicked(double deltaX, double deltaY) {
        fireMouseEvent(MouseEvent.MOUSE_CLICKED, deltaX, deltaY);
    }

    public void fireMouseClicked(double deltaX, double deltaY, KeyModifier... modifiers) {
        fireMouseEvent(MouseEvent.MOUSE_CLICKED, deltaX, deltaY, modifiers);
    }

    public void fireMousePressed() {
        fireMouseEvent(MouseEvent.MOUSE_PRESSED);
    }

    public void fireMousePressed(MouseButton button) {
        fireMouseEvent(MouseEvent.MOUSE_PRESSED, button, 0, 0);
    }

    public void fireMousePressed(double deltaX, double deltaY) {
        fireMouseEvent(MouseEvent.MOUSE_PRESSED, deltaX, deltaY);
    }

    public void fireMousePressed(double deltaX, double deltaY, KeyModifier... modifiers) {
        fireMouseEvent(MouseEvent.MOUSE_PRESSED, deltaX, deltaY


}

            }

            SampleListAdapter mAdapter = new SampleListAdapter(dataList);
            mAdapter.PlayProgramIndex = playProgramIndex;
            listView.SetAdapter(mAdapter);

            titleIcon.ResourceUrl = titleIconFavorite;
            titleText.Text = selectFavorite;
            animation.Play();
        }

        private void GenreSelect()
        {
            Tizen.Log.Fatal("NUI.ChannelList", "GenreSelect...");
            string selectGenre = (genreListView.GetLoadedItemView(genreListView.FocusItemIndex) as GenreListItem).Text;
            Animation animation = new Animation();
            animation.AnimateTo(contentLayout, "colorAlpha", 1.0f, 0, 334);
            animation.AnimateTo(selectContentLayout, "PositionX", windowSize.Width * 0.344270f, 0, 500);

            animation.Finished += (obj, ee) =>
            {
                FocusManager.Instance.SetCurrentFocusView(listView);
            };

            if (titleText.Text == selectGenre)
            {
                animation.Play();
                return;
            }

            if (genreListView.GetLoadedItemView(genreSelectIndex) != null)
            {
                (genreListView.GetLoadedItemView(genreSelectIndex) as GenreListItem).Select(false);
            }

            if (genreListView.GetLoadedItemView(genreListView.FocusItemIndex) != null)
            {
                (genreListView.GetLoadedItemView(genreListView.FocusItemIndex) as GenreListItem).Select(true);
            }

            if (selectListView.GetLoadedItemView(selectViewIndex) != null)
            {
                (selectListView.GetLoadedItemView(selectViewIndex) as SelectListItem).Select(false);
            }

            selectViewIndex = -1;
            genreSelectIndex = genreListView.FocusItemIndex;

            preSubSelectIndex = subSelectedIndex;
            playIndex = -1;
            listView.Name = selectGenre;
            List<object> dataList = new List<object>();
            int num = (new ListItemData(listView.Name, 0)).Num;

            for (int i = 0; i < num; i++)
            {
                ListItemData data = new ListItemData(listView.Name, i);
                dataList.Add(data);
                if (data.ProgramIndex == playProgramIndex)
                {
                    playIndex = i;
                }

            }

            SampleListAdapter mAdapter = new SampleListAdapter(dataList);
            mAdapter.PlayProgramIndex = playProgramIndex;
            listView.SetAdapter(mAdapter);

            titleIcon.ResourceUrl = titleIconGenre;
            titleText.Text = selectGenre;
            animation.Play();
        }

        private void SubListSelecteChanged(int index)
        {
            Tizen.Log.Fatal("NUI.ChannelList", "SubListSelectChanged...");
            Tizen.Log.Fatal("NUI.ChannelList", "index: " + index + ", titleText.Text: " + titleText.Text);
            //All Channels
            if (index == 0 && titleText.Text != "All_Channel")
            {
                /*playIndex = -1;
                listView.Name = "All_Channel";
                List<object> dataList = new List<object>();
                int num = (new ListItemData(listView.Name, 0)).Num;

                if (selectListView.GetLoadedItemView(selectViewIndex) != null)
                {
                    (selectListView.GetLoadedItemView(selectViewIndex) as SelectListItem).Select(false)


使用"Doc Johnson Mood-Naughty 2 XL"枪托插口的建议来放松直肠折叠,并减少肛交时推出阴茎/玩具的冲动.

雌性可以经历的一种不同类型的高潮,与正常的肛交高潮略有不同,被称作肛交引起的高潮. 这种性高潮起源于肛交和直肠本身,而不是腹部肌肉区域或生殖器区域. 高潮可以被描述为全身发抖,让你颤抖,但不能描述为肌肉痉挛。 如果性玩具或阴茎在这种性高潮期间被取出,你可以注意到肛门是如何进行大量的非自愿收缩和放松. 似乎你可以增加达到这种性高潮的机会,包括有节奏的呼吸(通过喉咙短促地呼气,从你的胃中产生). 肛门诱发性高潮通常不涉及从前列腺或先质性活体中泄漏出出任何种类的液体,并且没有可折叠期.

注:呼吸可以对增加实现任何类型高潮的机会产生显著影响. 考虑用短而有节奏的呼气 通过你的喉咙用你的胃。 呼吸和肛门或直肠肌肉的弹性似乎相互关联。

一些雌性会很难在阴道或肛门中取出一整根阴茎的长度,这发生在传教士姿势的缺陷上,因为雄性骨盆从未达到阴蒂,也没有为此创造出足够的刺激力,同样的问题也存在于狗型位置上,因为睾丸也可能无法到达阴蒂. 被激起后,一阴道的平均长度约为10cm,尽管阴道大小和阴茎长度一样有很大的差异. 色情演员利用一个更大的阴茎的优势,而不是将阴茎完全推入雌性体内,使其在相机上更具吸引力,因为在阴茎没有被完全插入时可以看到两个生殖器. 短阴茎的一个优点是,妇女不太可能拒绝让肛交尝试.

喷出是性刺激期间尿道出血出液的行为,许多人认为这是达到高潮状态高潮的最终指标,但情况并非总是如此. 雌性能产生的射精有两种,一种是来自斯凯内腺(与雄性前列腺相对应)的乳白色液体(可能),另一种是来自膀胱的被稀释的无味液体(可能). 科学并没有充分意识到这种流体出现的原因、地点和原因,我们并不完全确定所有妇女是否都拥有经历喷发的必要解剖学。 虽然乳白色液极为罕见,且含量极小,但�


    if (controller != null) {
      artboard.addController(controller);
      setState(() {
        _controller = controller;
        _isChatInput = _controller?.findInput<bool>('Chat');
        _isError = _controller?.findInput<bool>('Error');
      });
    }
  }
}
import '../utils/collection.dart';
import '../utils/member.dart';
import 'private_channel.dart';

/// Represents a presence channel in Pusher.
class PresenceChannel extends PrivateChannel {
  PresenceChannel({
    required super.client,
    required super.name,
  }) {
    onMemberAdded(_onMemberAdd);
    onMemberRemoved(_onMemberRemove);
  }

  /// Binding for the member added event.
  void onMemberAdded(Function callback) =>
      bind('pusher:member_added', callback);

  /// Binding for the member removed event.
  void onMemberRemoved(Function callback) =>
      bind('pusher:member_removed', callback);

  /// The user member of the channel.
  @override
  Member? get member =>
      userId != null ? _members.get(userId!) ?? Member(id: userId!) : null;

  final _members = Collection<Member>();

  List<Member> get members => _members.all();

  void _onMemberAdd(Map data) {
    options.log("MEMBER_ADDED", name, "member: $data");

    final member = Member.fromMap(data);
    _members.add(member.id, Member.fromMap(data), override: true);
  }

  void _onMemberRemove(Map data) {
    options.log("MEMBER_REMOVED", name, "member: $data");

    final id = data["user_id"] ?? data["id"];

    if (id != null) _members.remove(id);
  }
}
import 'package:meta/meta.dart';

import '../src/events_listeners.collection.dart';
import '../pusher_client_socket.dart';

export 'private_channel.dart';
export 'private_encrypted_channel.dart';
export 'presence_channel.dart';

/// Represents a channel in Pusher.
class Channel {
  /// The pusher client.
  final PusherClient client;

  /// The name of the channel.
  final String name;

  Channel({required this.client, required this.name});

  /// The options of the client.
  PusherOptions get options => client.options;

  /// The authentication options of the client.
  PusherAuthOptions get authOptions => options.authOptions;

  bool _subscribed = false;

  /// Whether the channel is subscribed or not.
  bool get subscribed => _subscribed;

  bool get isPrivate => name.startsWith("private-");
  bool get isPresence => name.startsWith("presence-");
  bool get isEncrypted => name.startsWith("private-encrypted-");
  bool get isPublic => !isPrivate && !isPresence && !isEncrypted;

  /// Sets the value of the subscribed property.
  @protected
  set subscribed(bool value) {
    _subscribed = value;
  }

  /// Subscribes to the channel.
  void subscribe([bool force = false]) async {
    if (!client.connected ||
        (subscribed && !force) ||
        client.socketId == null) {
      return;
    }

    _subscribed = false;

    options.log("SUBSCRIBE", name);

    client.sendEvent("pusher:subscribe", {"channel": name});

    if (isPublic) _subscribed = true;
  }

  final _eventsListenersCollection = EventsListenersCollection();

  /// Binds a listener to an event.
  void bind(String event, Function listener) =>
      _eventsListenersCollection.bind(event, listener);

  /// Unbinds a listener from an event.
  void unbind(String event) => _eventsListenersCollection.unbindAll(event);

  /// Handl


ckground: #202020
}

.ace-monokai .ace_gutter-active-line {
  background-color: #272727
}

.ace-monokai .ace_marker-layer .ace_selected-word {
  border: 1px solid #49483E
}

.ace-monokai .ace_invisible {
  color: #52524d
}

.ace-monokai .ace_entity.ace_name.ace_tag,
.ace-monokai .ace_keyword,
.ace-monokai .ace_meta.ace_tag,
.ace-monokai .ace_storage {
  color: #F92672
}

.ace-monokai .ace_constant.ace_character,
.ace-monokai .ace_constant.ace_language,
.ace-monokai .ace_constant.ace_numeric,
.ace-monokai .ace_constant.ace_other {
  color: #AE81FF
}

.ace-monokai .ace_invalid {
  color: #F8F8F0;
  background-color: #F92672
}

.ace-monokai .ace_invalid.ace_deprecated {
  color: #F8F8F0;
  background-color: #AE81FF
}

.ace-monokai .ace_support.ace_constant,
.ace-monokai .ace_support.ace_function {
  color: #66D9EF
}

.ace-monokai .ace_fold {
  background-color: #A6E22E;
  border-color: #F8F8F2
}

.ace-monokai .ace_storage.ace_type,
.ace-monokai .ace_support.ace_class,
.ace-monokai .ace_support.ace_type {
  font-style: italic;
  color: #66D9EF
}

.ace-monokai .ace_entity.ace_name.ace_function,
.ace-monokai .ace_entity.ace_other,
.ace-monokai .ace_variable {
  color: #A6E22E
}

.ace-monokai .ace_variable.ace_parameter {
  font-style: italic;
  color: #FD971F
}

.ace-monokai .ace_string {
  color: #E6DB74
}

.ace-monokai .ace_comment {
  color: #75715E
}

.ace-monokai .ace_markup.ace_underline {
  text-decoration: underline
}

.ace-monokai .ace_indent-guide {
  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQ11D6z7Bq1ar/ABCKBG6g04U2AAAAAElFTkSuQmCC) right repeat-y
}.ace-dawn .ace_gutter {
  background: #ebebeb;
  color: #333
}

.ace-dawn .ace_print-margin {
  width: 1px;
  background: #e8e8e8
}

.ace-dawn .ace_scroller {
  background-color: #F9F9F9
}

.ace-dawn .ace_text-layer {
  color: #080808
}

.ace-dawn .ace_cursor {
  border-left: 2px solid #000000
}

.ace-dawn .ace_overwrite-cursors .ace_cursor {
  border-left: 0px;
  border-bottom: 1px solid #000000
}

.ace-dawn .ace_marker-layer .ace_selection {
  background: rgba(39, 95, 255, 0.30)
}

.ace-dawn.ace_multiselect .ace_selection.ace_start {
  box-shadow: 0


using Nikse.SubtitleEdit.Core.Common;
using System;
using System.Collections.Generic;
using System.Text;

namespace Nikse.SubtitleEdit.Core.SubtitleFormats
{
    public class SubUrbia : SubtitleFormat
    {
        public override string Extension => ".json";

        public override string Name => "SubUrbia";

        public override string ToText(Subtitle subtitle, string title)
        {
            Guid subtitleId;
            if (subtitle.Header == null || !Guid.TryParse(subtitle.Header, out subtitleId))
            {
                subtitleId = Guid.NewGuid();
            }

            var sb = new StringBuilder();
            sb.Append("{\"header\": { \"subtitleId\": \"" + subtitleId + "\" },");
            sb.Append("\"subtitles\": [");

            int count = 0;
            foreach (var p in subtitle.Paragraphs)
            {
                if (count > 0)
                {
                    sb.Append(',');
                }

                sb.Append("{\"start\":");
                sb.Append(p.StartTime.TotalMilliseconds.ToString(System.Globalization.CultureInfo.InvariantCulture));
                sb.Append(",\"end\":");
                sb.Append(p.EndTime.TotalMilliseconds.ToString(System.Globalization.CultureInfo.InvariantCulture));

                sb.Append(",\"text\":\"");
                sb.Append(Json.EncodeJsonText(p.Text));
                sb.Append("\"}");

                if (!string.IsNullOrWhiteSpace(p.Extra))
                {
                    sb.Append(",\"comment\":\"");
                    sb.Append(Json.EncodeJsonText(p.Extra));
                    sb.Append("\"}");
                }

                count++;
            }
            sb.Append("]}");
            return sb.ToString().Trim();
        }

        public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
        {


#include "parse.h"

#include <cc_bstring.h>
#include <cc_debug.h>

#define PARSE_MODULE_NAME "protocol::ping::parse"

static bool parse_init = false;
static parse_req_metrics_st *parse_req_metrics = NULL;
static parse_rsp_metrics_st *parse_rsp_metrics = NULL;

void
parse_setup(parse_req_metrics_st *req, parse_rsp_metrics_st *rsp)
{
    log_info("set up the %s module", PARSE_MODULE_NAME);

    if (parse_init) {
        log_warn("%s has already been setup, overwrite", PARSE_MODULE_NAME);
    }

    parse_req_metrics = req;
    parse_rsp_metrics = rsp;

    parse_init = true;
}

void
parse_teardown(void)
{
    log_info("tear down the %s module", PARSE_MODULE_NAME);

    if (!parse_init) {
        log_warn("%s has never been setup", PARSE_MODULE_NAME);
    }
    parse_req_metrics = NULL;
    parse_rsp_metrics = NULL;
    parse_init = false;
}

parse_rstatus_e
parse_req(struct buf *buf)
{
    log_verb("parsing buf %p", buf);

    if (buf_rsize(buf) < REQ_LEN) {
        return PARSE_EUNFIN;
    }

    if (strncasecmp(buf->rpos, REQUEST, REQ_LEN) == 0) {
        buf->rpos += REQ_LEN;
        INCR(parse_req_metrics, request_parse);
        return PARSE_OK;
    } else { /* invalid request */
        INCR(parse_req_metrics, request_parse_ex);
        return PARSE_EOTHER;
    }
}

parse_rstatus_e
parse_rsp(struct buf *buf)
{
    log_verb("parsing buf %p", buf);

    if (buf_rsize(buf) < RSP_LEN) {
        return PARSE_EUNFIN;
    }

    if (cc_memcmp(buf->rpos, RESPONSE, RSP_LEN) == 0) {
        buf->rpos += RSP_LEN;
        INCR(parse_rsp_metrics, response_parse);
        return PARSE_OK;
    } else { /* invalid request */
        INCR(parse_rsp_metrics, response_parse_ex);
        return PARSE_EOTHER;
    }
}


res => {
                    return res.text()
                }).then(res => {
                    console.log(res)
                    res = res.replace(new RegExp("\\\\u", "gm"), '%u')
                    this.textarea = unescape(res)
                    return true;
                }).catch(err => {
                    console.log(err)
                    this.$message.error('Error connecting to Macast');
                    return false;
                })
            },
            save() {
                console.log(this.textarea)
                let url = '/api'
                let uploadData = new window.FormData()
                uploadData.append('save-launch-param', this.textarea)
                this.$http.post(url, uploadData).then(res => {
                    console.log(res)
                }).catch(err => {
                    console.log(err)
                    this.$message.error('Error connecting to Macast');
                })
                this.connecting = true;
                this.interval_id = setInterval(
                    async () => {
                        let res = await this.get_settings()
                        console.log('get_settings:', res)
                        if (res) {
                            clearInterval(this.interval_id)
                            this.connecting = false;
                            this.$notify({
                                title: 'Success',
                                message: 'Macast restart',
                                duration: 0
                            });
                        }
                    }, 1000)
            },
            isMobile() {
                let flag = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)
                return flag;
            },
            async refresh_plugin(data) {
                console.log(data)
                let uploadData = new window.FormData()
                uploadData.append('install-plugin', JSON.stringify(data))
                const loading = this.$loading({
                    lock: true,
                    text: 'Installing',
                    spinner: 'el-icon-loading',
                    background: 'rgba(0, 0, 0, 0.7)'
                });
                await this.$http.post('/api', uploadData).then(res => {
                    console.log(res.data)
                    if (res.data.code !== 0) {
                        console.log(res.data.message)
                        this.$message.error(res.data.message);
                        loading.close();
                        return
                    }
                    this.refresh_interval_id = setInterval(
                        async () => {
                            let res = await this.load_local_plugin()
                            console.log('load_local_plugin:', res)
                            if (res) {
                                clearInterval(this.refresh_interval_id)
                                loading.close();
                            }
                        }, 1000)
                }).catch(err => {
                    console.log(err)
                    this.$message.error('Error connecting to Macast');
                    loading.close();
                })
            },
            update_plugins() {
                this.plugins = [];
                for (let p of this.local_plugins) {
                    let data = {
                        title: p.title,
                        platform: p.platform, //插件适配的操作系统
                        available: p.platform.indexOf(this.platform) !== -1, // 是否适配当前系统
                        local_version: parseFloat(p.version), // 本地版本号
                        repo_version: 0, // 线上版本号
                        version_tag: `v${p.version}`,
                        version_tag_type: 'success',


.59l3.29-3.29L8.59,16H9h10V3 M20,2v15H9l-5,5V2H20L20,2z":"M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 12h-2v-2h2v2zm0-4h-2V6h2v4z",
            "M13 14h-2v-2h2v2zm0-9h-2v6h2V5zm6-2H5v16.59l3.29-3.29.3-.3H19V3m1-1v15H9l-5 5V2h16z":"M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 12h-2v-2h2v2zm0-4h-2V6h2v4"

            /* Your videos */
            "M10,8l6,4l-6,4V8L10,8z M21,3v18H3V3H21z M20,4H4v16h16V4z":"M18.45,3.75H5.55a1.81,1.81,0,0,0-1.8,1.8v12.8a1.8,1.8,0,0,0,1.7,1.9h12.9a1.8,1.8,0,0,0,1.9-1.69v-13A1.8,1.8,0,0,0,18.45,3.75Zm-.1,14.6H5.55V5.55h12.8Zm-3.2-6.1-5,3.2V9.05Z",
            "m10 8 6 4-6 4V8zm11-5v18H3V3h18zm-1 1H4v16h16V4z":"M18.45,3.75H5.55a1.81,1.81,0,0,0-1.8,1.8v12.8a1.8,1.8,0,0,0,1.7,1.9h12.9a1.8,1.8,0,0,0,1.9-1.69v-13A1.8,1.8,0,0,0,18.45,3.75Zm-.1,14.6H5.55V5.55h12.8Zm-3.2-6.1-5,3.2V9.05Z",
        }

        navbarIconsClick = {
            /* Home */
            "M4 21V10.08l8-6.96 8 6.96V21h-6v-6h-4v6H4z": "M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8",
            /* Subscription */
            "M20 7H4V6h16v1zm2 2v12H2V9h20zm-7 6-5-3v6l5-3zm2-12H7v1h10V3z":"M18.7 8.7H5.3V7h13.4v1.7zm-1.7-5H7v1.6h10V3.7zm3.3 8.3v6.7c0 1-.7 1.6-1.6 1.6H5.3c-1 0-1.6-.7-1.6-1.6V12c0-1 .7-1.7 1.6-1.7h13.4c1 0 1.6.8 1.6 1.7zm-5 3.3l-5-2.7V18l5-2.7z",
            /* Library */
            "M4 20h14v1H3V6h1v14zM21 3v15H6V3h15zm-4 7.5L11 7v7l6-3.5z":"M4 6H2v14c0 1.1.9 2 2 2h14v-


ceed())

		Expect(netconf.GatewayRequest).To(BeNil())
		Expect(netconf.IsFilterV4Gateway).To(BeTrue())
		Expect(netconf.IsFilterV6Gateway).To(BeTrue())
	})

	It("test LoadDelegateNetConf keeps empty GatewayRequest", func() {
		conf := `{
			"name": "node-cni-network",
			"type": "multus",
			"kubeconfig": "/etc/kubernetes/node-kubeconfig.yaml",
			"delegates": [{
				"name": "weave-list",
				"plugins": [ {"type" :"weave"} ]
			}]
		}`

		nsJSON := `{ "name": "foobar", "default-route": [] }`
		ns := &NetworkSelectionElement{}

		err := json.Unmarshal([]byte(nsJSON), ns)
		Expect(err).NotTo(HaveOccurred())

		netconf, err := LoadDelegateNetConf([]byte(conf), ns, "", "")
		Expect(err).NotTo(HaveOccurred())

		Expect(CheckGatewayConfig([]*DelegateNetConf{netconf})).To(Succeed())

		Expect(netconf.GatewayRequest).NotTo(BeNil())
		Expect(*netconf.GatewayRequest).To(BeEmpty())
		Expect(netconf.IsFilterV4Gateway).To(BeTrue())
		Expect(netconf.IsFilterV6Gateway).To(BeTrue())
	})

	It("test LoadDelegateNetConf keeps GatewayRequest", func() {
		conf := `{
			"name": "node-cni-network",
			"type": "multus",
			"kubeconfig": "/etc/kubernetes/node-kubeconfig.yaml",
			"delegates": [{
				"name": "weave-list",
				"plugins": [ {"type" :"weave"} ]
			}]
		}`

		nsJSON := `{ "name": "foobar", "default-route": [ "10.1.1.1" ] }`
		ns := &NetworkSelectionElement{}

		err := json.Unmarshal([]byte(nsJSON), ns)
		Expect(err).NotTo(HaveOccurred())

		netconf, err := LoadDelegateNetConf([]byte(conf), ns, "", "")
		Expect(err).NotTo(HaveOccurred())

		Expect(CheckGatewayConfig([]*DelegateNetConf{netconf})).To(Succeed())

		Expect(netconf.GatewayRequest).NotTo(BeNil())
		Expect(*netconf.GatewayRequest).To(HaveLen(1))
		Expect(netconf.IsFilterV4Gateway).To(BeFalse())
		Expect(netconf.IsFilterV6Gateway).To(BeTrue())
	})

	It("test LoadDelegateNetConf keeps dual GatewayRequest", func() {
		conf := `{
			"name": "node-cni-network",
			"type": "multus",
			"kubeconfig": "/etc/kubernetes/node-kubeconfig.yaml",
			"delegates": [{
				"name": "weave-list",
				"plugins": [ {"type" :"weave"} ]
			}]
		}`

		nsJSON := `{ "name": "foobar", "default-route": [ "10.1.1.1", "fc00::1" ] }`
		ns := &NetworkSelectionElement{}

		err := json.Unmarshal([]byte(nsJSON), ns)
		Expect(err).NotTo(HaveOccurred())

		netconf, err := LoadDelegateNetConf([]byte(conf), ns, "", "")
		Expect(err).NotTo(HaveOccurred())

		Expect(CheckGatewayConfig([]*DelegateNetConf{netconf})).To(Succeed())

		Expect(netconf.GatewayRequest).NotTo(BeNil())
		Expect(*netconf.GatewayRequest).To(HaveLen(2))
		Expect(netconf.IsFilterV4Gateway).To(BeFalse())
		Expect(netconf.IsFilterV6Gateway).To(BeFalse())
	})

})
/*
Copyright © 2023 Red Hat, Inc.

Licensed under the Apac


//////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    if (Failure_State==5) {     // When a failure has already occured
        Fi  = 0;
    } else if (dU == 0) {   // When deformation doesn't change from the last
        Fi  = Fi_1;
    } else {
        double  betaS=0,betaC=0,betaK=0;
        bool    FailS=false,FailC=false,FailK=false;
    ///////////////////////////////////////////////////////////////////////////////////////////
    /////////////////// WHEN REVERSAL /////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////
        if ( (onBackbone && Fi_1*dU < 0) || (onBackbone && Fi_1==0 && Ui_1*dU<=0) ) {
            onBackbone      = false;
    /////////////////////////// UPDATE PEAK POINTS ////////////////////////////////////////////
    /////////////////// UPDATE UNLOADING STIFFNESS ////////////////////////////////////////////
            double  EpjK    = engAcml            - 0.5*(Fi_1 / Kunload)*Fi_1;
            double  EiK     = engAcml - engDspt  - 0.5*(Fi_1 / Kunload)*Fi_1;
            betaK           = pow( (EiK / (engRefK - EpjK)), c_K );
            FailK           = (betaK>1);
            betaK           = betaK < 0 ? 0 : (betaK>1 ? 1 : betaK);
            Kunload         *= (1 - betaK);
            if (Failure_State>1) {
                Kunload     = 0.5*Ke;
            }
            KgetTangent     = Kunload;
        }
        Fi	    = Fi_1 + Kunload * dU;
    ///////////////////////////////////////////////////////////////////////////////////////////
    /////////////////// WHEN NEW EXCURSION /////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////
        if (!onBackbone && Fi_1*Fi <= 0.0 && Failure_State>0) {
    /////////////////// UPDATE BACKBONE CURVE /////////////////////////////////////////////////
            double Ei   = max(0.0, engAcml - engDspt);
            betaS   = pow((Ei / (engRefS - engAcml)), c_S);
            betaC   = pow((Ei / (engRefC - engAcml)), c_C);
            FailS   = (betaS>1);
            FailC   = (betaC>1);
            betaS   = betaS < 0 ? 0 : (betaS>1 ? 1 : betaS);
            betaC   = betaC < 0 ? 0 : (betaC>1 ? 1 : betaC);
            engDspt = engAcml;
        // Positive
            if (dU > 0) {
                double FcapProj = posFcap  - posKpc * posUcap;
            // Yield Point
                posFy       *= (1 - betaS * D_pos);
                posKp       *= (1 - betaS * D_pos); // Post-Yield Stiffness
                FcapProj    *= (1 - betaC * D_pos);
                posUy       = posFy / Ke;
                posKpc      = posFy < posFres ? 0 : -posKpc_0 * (posFy - posFres) / (posFy_0 - posFres);
            // Capping Point
                double FyPro


using System;
using System.Collections.Generic;
using System.Text;
using GMap.NET;
using GMap.NET.WindowsForms;
using GMap.NET.WindowsForms.Markers;
using MissionPlanner;
using MissionPlanner.ArduPilot;
using MissionPlanner.Maps;
using SkiaSharp;

namespace SvgNet.SvgGdi
{
    class shim
    {
    }

}
/*
namespace System.Drawing
{
    public class Bitmap : MissionPlanner.Drawing.Bitmap
    {
        public Bitmap(byte[] largeIconsImage, Size clientSizeHeight) : base(largeIconsImage, clientSizeHeight)
        {
        }

        public Bitmap(int width, int height, SKColorType colorType = SKColorType.Bgra8888) : base(width, height, colorType)
        {
        }
    }
}
*/

namespace Xamarin.Properties
{
    internal class Resources : MissionPlanner.Properties.ResourcesX
    {

    }
}

namespace GMap.NET.Drawing.Properties
{
    internal class Resources : MissionPlanner.Properties.ResourcesX
    {

    }
}

namespace MissionPlanner.Maps
{
    internal class Resources: MissionPlanner.Properties.ResourcesX
    {

    }
}

namespace Xamarin
{
    public class Common
    {
        public static GMapMarker getMAVMarker(MAVState MAV)
        {
            PointLatLng portlocation = new PointLatLng(MAV.cs.lat, MAV.cs.lng);

            if (MAV.aptype == MAVLink.MAV_TYPE.FIXED_WING)
            {
                // colorise map marker/s based on their sysid, for common sysid/s used 1-6, 11-16, and 101-106
                // its rare for ArduPilot to be used to fly more than 6 planes at a time from one console.
                int which = 0; // default 0=red for other sysids
                if ((MAV.sysid >= 1) && (MAV.sysid <= 6)) { which = MAV.sysid - 1; }  //1=black, 2=blue, 3=green,4=yellow,5=orange,6=red
                if ((MAV.sysid >= 11) && (MAV.sysid <= 16)) { which = MAV.sysid - 11; }  //1=black, 2=blue, 3=green,4=yellow,5=orange,6=red
                if ((MAV.sysid >= 101) && (MAV.sysid <= 106)) { which = MAV.sysid - 101; }  //1=black, 2=blue, 3=green,4=yellow,5=orange,6=red

                return (new GMapMarkerPlane(which, portlocation, MAV.cs.yaw,
                    MAV.cs.groundcourse, MAV.cs.nav_bearing, MAV.cs.target_bearing,
                    MAV.cs.radius * CurrentState.multiplierdist)
                {
                    ToolTipText = MAV.cs.alt.ToString("0") + CurrentState.AltUnit + " | " + (int)MAV.cs.airspeed +
                                  CurrentState.SpeedUnit + " | id:" + (int)MAV.sysid,
                    ToolTipMode = MarkerTooltipMode.Always
                });
            }
            else if (MAV.


_data:
	tst.b vr_flag
	bne vr_read_data
	clr.l -(sp)
	GEMDOS 32,6
	move.l d0,stack_adr	; we're in supervisor mode!
.disp_again:
	moveq #0,d3				; resets bits #31, #15, #8
	tst.b playing			; is there a sound?
	beq.s .no_sound
	bsr start_sound
.no_sound:
	tst.l samp_sizes
	beq .out
	tst.b bad_comp			; compression supported?
	bne .out					; no, only sound!
	move.b sync,d3
	beq.s .lb0				; no synchronisation
	move.l t2samps,a6		; the sync table
	addq.l #4,a6			; jumps over the dummy address
	tst.b sync+1			; can we skip a key frame?
	beq.s .lb0				; no!
	bset #16,d3
.lb0:
	move.l $4BA.w,start_time	; Timer C counter (1/200)
	moveq #0,d6				; current samp
	moveq #0,d5				; current s2chunk
	move.l s2chunks,a4
	move.l 12(a4),a5		; next s2chunk
	move.l 8(a4),d4		; tag
	move.l d4,d0
	asl.l #4,d0				; each codec 16 bytes
	move.l codecs,a2
	move.l (a2,d0.l),imagex
	move.l 4(a2,d0.l),imagey
	move 6(a2,d0.l),flx_number
	move.l 8(a2,d0.l),depth
	clr flx_start
	tst.b is_tt
	bne.s .tt
	move.l 12(a2,d0.l),compression
	bra.s .no_tt
.tt:
	move.l 12(a2,d0.l),tt_comp
.no_tt:
	moveq #-1,d7				; i for the loop
	bra .end_of_loop
.loop:
	move.l d7,d0
	asl.l #2,d0
	move.l chunkoffs,a0
	move.l 0(a0,d0.l),d0
	SEEK d0,0	; start of chunk data
	move.l d5,d1
	move.l d1,d0
	add.l d0,d0
	add.l d0,d1				; *3
	asl.l #2,d1				; *4 = *12
	cmp.l d7,a5				; jumps if i<>next_s2chunk
	bne.s .lb4
	move.l d5,d0
	addq.l #1,d0
	sub.l s2chunk_num,d0	; jumps if cur_s2chunk + 1 >= s2chunk_num
	bpl.s .lb4
	addq.l #1,d5			; cur_s2chunk++
	addq.l #8,d1
	addq.l #4,d1			; one bloc more
	move.l 12(a4,d1.l),a5
.lb4:
	move.l 4(a4,d1.l),d2	; num samps
	cmp.l 8(a4,d1.l),d4	; tags equals?
	beq .end_of_samps	; yes, that's ok
	move.l 8(a4,d1.l),d4	; new tag
	move.l d4,d0
	asl.l #4,d0				; each codec 16 bytes
	move.l (a2,d0.l),imagex
	move.l 4(a2,d0.l),imagey
	move 6(a2,d0.l),f


 obbligatori
			if (nome.equals("") || valore.equals("")) {
				String tmpElenco = "";
				if (nome.equals("")) {
					tmpElenco = "Nome";
				}
				if (valore.equals("")) {
					if (tmpElenco.equals("")) {
						tmpElenco = "Valore";
					} else {
						tmpElenco = tmpElenco + ", Valore";
					}
				}
				this.pd.setMessage(CostantiControlStation.MESSAGGIO_ERRORE_PREFISSO_DATI_INCOMPLETI_NECESSARIO_INDICARE + tmpElenco);
				return false;
			}

			// Controllo che non ci siano spazi nei campi di testo
			if ((nome.indexOf(" ") != -1) ) {
				this.pd.setMessage("Non inserire spazi nei nomi");
				return false;
			}
			if(
				(!this.core.getDriverBYOKUtilities().isEnabledBYOK() || !this.core.getDriverBYOKUtilities().isWrappedWithAnyPolicy(valore))
				&&
				(valore.startsWith(" ") || valore.endsWith(" "))
			){
				this.pd.setMessage("Non inserire spazi all'inizio o alla fine dei valori");
				return false;
			}
			if(!this.checkLength255(nome, PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_NOME)) {
				return false;
			}

			// Se tipoOp = add, controllo che il message-security non sia gia' stato
			// registrato per la porta delegata
			if (tipoOp.equals(TipoOperazione.ADD)) {
				boolean giaRegistrato = false;
				PortaDelegata pde = this.porteDelegateCore.getPortaDelegata(idInt);
				String nomeporta = pde.getNome();
				MessageSecurity messageSecurity = pde.getMessageSecurity();

				if(messageSecurity!=null &&
					messageSecurity.getRequestFlow()!=null){
					for (int i = 0; i < messageSecurity.getRequestFlow().sizeParameterList(); i++) {
						MessageSecurityFlowParameter tmpMessageSecurity =messageSecurity.getRequestFlow().getParameter(i);
						if (nome.equals(tmpMessageSecurity.getNome())) {
							giaRegistrato = true;
							break;
						}
					}
				}

				if (giaRegistrato) {
					this.pd.setMessage("La proprieta' di message-security " + nome + " è già stato associata alla porta delegata " + nomeporta);
					return false;
				}
			}

			return true;

		} catch (Exception e) {
			this.logError(e.getMessage(), e);
			throw new ControlStationCoreException(e.getMessage(),e);
		}
	}

	// Prepara la lista di Message-Security request-flow delle porte delegate
	public void preparePorteDelegateMessageSecurityRequestList(ISearch ricerca, List<MessageSecurityFlowParameter> lista)
			throws Exception {
		try {

			// prelevo il flag che mi dice da quale pagina ho acceduto la sezione delle porte delegate
			Integer parentPD = ServletUtils.getIntegerAttributeFromSession(PorteDelegateCostanti.ATTRIBUTO_PORTE_DELEGATE_PARENT, this.session, this.request);
			if(parentPD == null) parentPD = PorteDelegateCostanti.ATTRIBUTO_PORTE_DELEGATE_PARENT_NONE;

			String id = this.getParametroLong(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID);
			String idsogg = this.getParametroLon


argest, newLargest;
	oldLargest = ( g_MixedTextureHeap.GetLastFree() ) ? g_MixedTextureHeap.GetLastFree()->heapInfo.nBytes : 0;
	g_MixedTextureHeap.Compact();
	newLargest = ( g_MixedTextureHeap.GetLastFree() ) ? g_MixedTextureHeap.GetLastFree()->heapInfo.nBytes : 0;

	DevMsg( "Compacted texture heap. Old largest block: %.3fk, New largest block: %.3fk\n", oldLargest / 1024.0, newLargest / 1024.0 );
}

//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
CTextureHeap::CTextureHeap()
{
}

//-----------------------------------------------------------------------------
// Return the allocator used to create the texture
//-----------------------------------------------------------------------------
inline TextureAllocator_t GetTextureAllocator( IDirect3DBaseTexture9 *pTexture )
{
	return ( pTexture->GetType() == D3DRTYPE_CUBETEXTURE ) ? (( CXboxCubeTexture *)pTexture)->m_fAllocator : (( CXboxTexture *)pTexture)->m_fAllocator;
}

//-----------------------------------------------------------------------------
// Build and alloc a texture resource
//-----------------------------------------------------------------------------
IDirect3DTexture *CTextureHeap::AllocTexture( int width, int height, int levels, DWORD usage, D3DFORMAT d3dFormat, bool bNoD3DMemory, bool bCacheable )
{
#if defined( SUPPORTS_TEXTURE_STREAMING )
	static bool bInitializedPools;
	if ( !bInitializedPools )
	{
		// Warm the pools, now once
		// Pools that should not exist due to state, will inhibit any further potential latent use
		bInitializedPools = true;
		if ( !g_pFullFileSystem->IsDVDHosted() )
		{
			MEM_ALLOC_CREDIT_( __FILE__ ": Base, Pooled D3D" );
			bool bNo1024 = CommandLine()->FindParm( "-no1024" ) && !CommandLine()->FindParm( "-allow1024" );
			if ( !bNo1024 )
			{
				g_TextureBasePool_1024.Free( g_TextureBasePool_1024.Alloc() );
				g_TextureBasePool_512.Free( g_TextureBasePool_512.Alloc() );
			}
			g_TextureBasePool_256.Free( g_TextureBasePool_256.Alloc() );
			g_TextureBasePool_128.Free( g_TextureBasePool_128.Alloc() );
			g_TextureBasePool_64.Free( g_TextureBasePool_64.Alloc() );
			g_TextureBasePool_32.Free( g_TextureBasePool_32.Alloc() );
		}
	}
#endif

	// determine allocator and texture component sizes
	unsigned int nBaseSize;
	unsigned int nMipSize;
	TextureAllocator_t nAllocator = TextureParamsToAllocator( width, height, levels, usage, d3dFormat, &nBaseSize, &nMipSize );

	if ( bCacheable && nAllocator == TA_STANDARD )
	{
		// texture doesn't meet the cacheing guidelines
		bCacheable = false;
	}

	int mipOffset;
	if ( !bCacheable )
	{
		// a non-cacheable texture is setup with a contiguous base
		nAllocator = TA_STANDARD;
		mipOffset = XGHEADER_CONTIGUOUS_MIP_OFFSET;
		nBaseSize += nMipSize;
		nMipSize = 0;
	}
	else
	{
		// a cache


# Code generated by Lark OpenAPI.

from typing import Any, Optional, Union, Dict, List, Set, IO, Callable, Type
from lark_oapi.core.construct import init
from .i18n import I18n
from .i18n import I18n

class UserTaskSummaryType(object):
    _types = {
        "file_key": I18n,
        "file_value": List[I18n],
    }

    def __init__(self, d=None):
        self.file_key: Optional[I18n] = None
        self.file_value: Optional[List[I18n]] = None
        init(self, d, self._types)

    @staticmethod
    def builder() -> "UserTaskSummaryTypeBuilder":
        return UserTaskSummaryTypeBuilder()

class UserTaskSummaryTypeBuilder(object):
    def __init__(self) -> None:
        self._user_task_summary_type = UserTaskSummaryType()

    def file_key(self, file_key: I18n) -> "UserTaskSummaryTypeBuilder":
        self._user_task_summary_type.file_key = file_key
        return self

    def file_value(self, file_value: List[I18n]) -> "UserTaskSummaryTypeBuilder":
        self._user_task_summary_type.file_value = file_value
        return self

    def build(self) -> "UserTaskSummaryType":
        return self._user_task_summary_type


, )*) => {
        $(
            #[test]
            fn $f () {
                let mut authority = ::$new("tests/named_test_configs/example.com.zone", module_path!(), stringify!($f));
                let keys = ::authority_battery::dnssec::add_signers(&mut authority);
                ::authority_battery::dnssec::$f(authority, &keys);
            }
        )*
    }
}

macro_rules! dnssec_battery {
    ($new:ident) => {
        #[cfg(test)]
        mod dnssec {
            mod $new {
                define_dnssec_test!($new;
                    test_a_lookup,
                    test_soa,
                    test_ns,
                    test_aname_lookup,
                    test_wildcard,
                    test_nsec_nodata,
                    test_nsec_nxdomain_start,
                    test_nsec_nxdomain_middle,
                    test_nsec_nxdomain_wraps_end,
                    test_rfc_6975_supported_algorithms,
                );
            }
        }
    };
}
<reponame>darkstalker/frappe<gh_stars>10-100
//! The Signal type.
//!
//! Signals are values that change over time. They represent shared mutable state, but exposed
//! in a functional way. The value can be read using the `Signal::sample` method. Signals do all
//! their work on the receiver side, so they're "lazy". Operations applied on a signal are applied
//! to the value every time the signal is sampled.
//!
//! Signals are usually constructed by stream operations like `Stream::hold` and `Stream::fold`.
//! They can also take values from a custom function by using `Signal::from_fn`.
//!
//! # Example
//! ```
//! use frappe::Sink;
//!
//! let sink = Sink::new();
//! let sig1 = sink.stream().fold(0, |a, n| a + *n);
//! let sig2 = sig1.map(|x| x + 2);
//!
//! sink.send(10);
//! assert_eq!(sig1.sample(), 10);
//! assert_eq!(sig2.sample(), 12);
//!
//! sink.send(30);
//! assert_eq!(sig1.sample(), 40);
//! assert_eq!(sig2.sample(), 42);
//! ```

use crate::stream::Stream;
use crate::sync::Mutex;
use crate::types::{MaybeOwned, Storage};
use std::fmt;
use std::sync::{mpsc, Arc};

#[cfg(feature = "lazycell")]
use lazycell::AtomicLazyCell;

/// Represents a value that changes over time.
pub struct Signal<T>(Arc<dyn Fn() -> T + Send + Sync>);

impl<T> Signal<T> {
    /// Creates a signal with constant value.
    #[inline]
    pub fn constant(val: T) -> Self
    where
        T: Clone + Send + Sync + 'static,
    {
        Signal::from_fn(move || val.clone())
    }

    /// Creates a signal that samples it's values from an external source.
    #[inline]
    pub fn from_fn<F>(f: F) -> Self
    where
        F: Fn() -> T + Send + Sync + 'static,
    {
        Signal(Arc::new(f))
    }

    /// Creates a signal from shared storage.
    #[inline]
    pub(crate) fn from_storage<S>(storage: Arc<Storage<T>>, source: S) -> Self
    where
        T: Clone + Send + Sync + 'static,
        S: Send + Sync + 'static,
    {
        Signal::from_fn(move || {
            let _keepalive = &source;
            storage.get()
        })
    }

    /// Samples the value of the signal.
    ///
    /// The action of sampling pulls the value through the signal chain until it finds it's source,
    /// clones it if necessary, and then transforms it into the result value.
    #[inline]
    pub fn sample(&self) -> T {


tation
				{ 22, AtlasLoot:GetRetByFaction(64794, 64793) }, -- Bloodthirsty Gladiator's Medallion of Tenacity
			},
			[SET2_DIFF] = {
				{ 1, 61033 }, -- Vicious Gladiator's Badge of Conquest
				{ 2, 61035 }, -- Vicious Gladiator's Badge of Dominance
				{ 3, 61034 }, -- Vicious Gladiator's Badge of Victory
				{ 5, 61026 }, -- Vicious Gladiator's Emblem of Cruelty
				{ 6, 61031 }, -- Vicious Gladiator's Emblem of Meditation
				{ 7, 61032 }, -- Vicious Gladiator's Emblem of Tenacity
				{ 16, 61047 }, -- Vicious Gladiator's Insignia of Conquest
				{ 17, 61045 }, -- Vicious Gladiator's Insignia of Dominance
				{ 18, 61046 }, -- Vicious Gladiator's Insignia of Victory
				{ 20, AtlasLoot:GetRetByFaction(60801, 60794) }, -- Vicious Gladiator's Medallion of Cruelty
				{ 21, AtlasLoot:GetRetByFaction(60806, 60799) }, -- Vicious Gladiator's Medallion of Meditation
				{ 22, AtlasLoot:GetRetByFaction(60807, 60800) }, -- Vicious Gladiator's Medallion of Tenacity
			},
		},
		{
			name = AL["Gladiator Mount"],
			ExtraList = true,
			[NORMAL_DIFF] = {
				{ 1, 71339 },
				{ 16, "ac6003" },
			},
		},
	},
}

data["ArenaS10PvP"] = {
	name = format(AL["Season %s"], "10"),
	ContentType = ARENA_CONTENT,
	LoadDifficulty = LOAD_DIFF,
	TableType = NORMAL_ITTYPE,
	ContentPhaseCata = 3,
	items = {
		{
			name = AL["Sets"],
			TableType = SET_ITTYPE,
			[SET2_UPGRADE_DIFF] = {
				{ 1, 4005910 }, -- Warlock
				{ 3, 4005916 }, -- Priest Healing
				{ 4, 4005915 }, -- Priest Shadow
				{ 6, 4005914 }, -- Rogue
				{ 8, 4005920 }, -- Hunter
				{ 10, 4005909 }, -- Warrior Melee
				{ 13, 4005924 }, -- Death Knight Melee
				{ 16, 4005919 }, -- Mage
				{ 18, 4005923 }, -- Druid Resto
				{ 19, 4005921 }, -- Druid Balance
				{ 20, 4005922 }, -- Druid Feral
				{ 22, 4005913 }, -- Shaman Resto
				{ 23, 4005911 }, -- Shaman Elemental
				{ 24, 4005912 }, -- Shaman Enhancement
				{ 26, 4005918 }, -- Paladin Holy
				{ 27, 4005917 }, -- Paladin Melee
			},
			[SET3_DIFF] = {
				{ 1, 4003910 }, -- Warlock
				{ 3, 4003916 }, -- Priest Healing
				{ 4, 4003915 }, -- Priest Shadow
				{ 6, 4003914 }, -- Rogue
				{ 8, 4003920 }, -- Hunter
				{ 10, 4003909 }, -- Warrior Melee
				{ 13, 4003924 }, -- Death Knight Melee
				{ 16, 4003919 }, -- Mage
				{ 18, 4003923 }, -- Druid Resto
				{ 19, 4003921 }, -- Druid Balance
				{ 20, 4003922 }, -- Druid Feral
				{ 22, 4003913 }, -- Shaman Resto
				{ 23, 4003911 }, -- Shaman Elemental
				{ 24, 4003912 }, -- Shaman Enhancement
				{ 26, 4003918 }, -- Paladin Holy
				{ 27, 4003917 }, -- Paladin Melee
			},
			[SET3_ELITE_DIFF] = {
				{ 1, 4004910 }, -- Warlock
				{ 3, 4004916 }, -- Priest Healing
				{ 4, 4004915 }, -- Priest Shadow
				{ 6, 4004914 }, --


 "",
		target_type = 9999,
		start = 1,
		hide = 3,
		label = "",
		condition = "Coming Soon",
		rank = 3,
		id = 100933,
		target_num = 1,
		explain2 = ""
	},
	[100934] = {
		explain1 = "",
		name = "铁血阵营子勋章3",
		target_id = "0",
		type = 0,
		count_inherit = 0,
		desc = "",
		next = 0,
		icon = "",
		target_type = 9999,
		start = 1,
		hide = 3,
		label = "",
		condition = "Coming Soon",
		rank = 4,
		id = 100934,
		target_num = 1,
		explain2 = ""
	},
	[100935] = {
		explain1 = "",
		name = "铁血阵营子勋章3",
		target_id = "0",
		type = 0,
		count_inherit = 0,
		desc = "",
		next = 0,
		icon = "",
		target_type = 9999,
		start = 1,
		hide = 3,
		label = "",
		condition = "Coming Soon",
		rank = 5,
		id = 100935,
		target_num = 1,
		explain2 = ""
	},
	all = {
		10011,
		10012,
		10013,
		10014,
		10015,
		10021,
		10022,
		10023,
		10024,
		10025,
		10031,
		10032,
		10033,
		10034,
		10035,
		10041,
		10042,
		10043,
		10044,
		10045,
		10051,
		10052,
		10053,
		10054,
		10055,
		10061,
		10062,
		10063,
		10064,
		10065,
		10071,
		10072,
		10073,
		10074,
		10075,
		10081,
		10082,
		10083,
		10084,
		10085,
		10091,
		10092,
		10093,
		10094,
		10095,
		10101,
		10102,
		10103,
		10104,
		10105,
		100611,
		100612,
		100613,
		100614,
		100615,
		100621,
		100622,
		100623,
		100624,
		100625,
		100631,
		100632,
		100633,
		100634,
		100635,
		100711,
		100712,
		100713,
		100714,
		100715,
		100721,
		100722,
		100723,
		100724,
		100725,
		100731,
		100732,
		100733,
		100734,
		100735,
		100811,
		100812,
		100813,
		100814,
		100815,
		100821,
		100822,
		100823,
		100824,
		100825,
		100831,
		100832,
		100833,
		100834,
		100835,
		100911,
		100912,
		100913,
		100914,
		100915,
		100921,
		100922,
		100923,
		100924,
		100925,
		100931,
		100932,
		100933,
		100934,
		100935
	}
}


_page(order, page);
    // 标记已分配。示意代码忽略分配失败的情况
    page->allocated = 1;
    return page;
}

// 释放伙伴块
void buddy_free_pages(struct page *page)
{
    int order;
    struct list_head *free_list;

    // 标记成空闲
    page->allocated = 0;
    // (尝试)合并伙伴块
    page = merge_page(page);

    // 把合并后的伙伴块放入对应大小的空闲链表
    order = page->order;
    free_list = &(free_lists[order]);
    add_one_entry(free_list, page);
}
```

上述代码介绍了`buddy_alloc_pages`和`buddy_free_pages`的实现逻辑。

`buddy_alloc_pages` 接收 `order` 参数，用于分配 `2^order` 个连续物理页。

- `order`：表示需要分配的块大小为 `2^order` 个物理页（例如 `order=3` 表示分配 8 个页）。
- `free_list`：指向不同大小空闲链表的指针。
- `page`：最终返回的分配块。
- 第一个`for`循环的作用是从 `order` 对应的链表开始查找，若为空则尝试更大的块（如 `order+1`）。找到非空链表后，调用 `get_one_entry` 取出一个空闲块。如果取出的块大小大于所需（例如分配 2 个页但取出的是 8 个页的块），则递归分裂成更小的块。分裂后，将多余的块插入对应链表（例如分裂出 4 个页的块插入 order=2 的链表）。
- 仅将分配块的第一个物理页标记为已分配，而不修改其余页对应的 `physical_page` 结构体。这能够减少内存修改操作从而提升性能，而这么做可行的原因是这些页在被分配后不位于伙伴系统的任一空闲链表中（因此不会被再次分配）。

函数 `buddy_free_pages`释放内存块，并尝试合并伙伴块以减少碎片。

- 将被释放块的第一个页标记为空闲，然后检查伙伴块（相邻且大小相同的块）是否空闲，若空闲则合并成更大的块。合并过程可能递归进行，直到无法合并为止。根据合并后块的大小（`order`），将其插入对应的空闲链表。

![](asserts


Fire()  // 발사를 위한 과정
    {
        currentFireRate = currentGun.fireRate;
        Shoot();
    }

    private void Shoot()  // 실제 발사 되는 과정
    {
        Debug.Log("총알 발사 함");
    }
}
```

- `currentFireRate`
  - 단발로 여러번 쏠 때, 그 한발 한발간의 텀이 길 수록 연사 속도가 낮은 것이다.
  - 📜Gun.cs 에서 연사 속도(한발 한발 사이의 텀)인 `fireRate`값이 0.2 이라고 예를 들어 보면, `currentFireRate = fireRate` 이렇게 `currentFireRate`은 0.2 에서 시작하고, 이 `currentFireRate`를 1 초마다 1 씩 감소 시킨다.
    - `currentFireRate`가 0 보다 클 때까진 발사를 못하게 한다.
    - 따라서 이 총은 한번 발사한 후 0.2초 동안은 발사를 못하는 것과 같다! 연사 속도를 0.2라고 볼 수 있다.
- 매 프레임마다
  - *GunFireRateCalc()*
    - 👉 `currentFireRate`을 Time.deltaTime 만큼 감소시킨다. (즉, 1초 동안 1씩 감소하는 것과 마찬가지)
  - *TryFire()*
    - 👉발사해도 되는 상황인지를 검사한다.
      - 마우스 좌클 입력이 들어왔는지 검사
      - 그리고 `currentFireRate`가 0 이하인지를 검사한다.
      - 둘 다 만족한다면 *Fire()*를 실행한다.
    - *Fire()*
      - 👉 발사를 위한 과정
        - 이제 발사를 곧 바로 할 것이니 `currentFireRate`을 다시 📜Gun.cs의 `fireRate` 값으로 초기화 해야 한다. `currentFireRate`값은 `fireRate`에서 시작하여 다시 매 프레임마다 Time.deltaTime 만큼 감소되며, 이 값이 0 이하로 떨어질 때까진 발사하지 못한다.
        - 실제 발사를 처리하는 *Shoot()*을 실행한다.
          - *Shoot()*
            - 👉 실제 발사를 처리하는 과정.

![image](https://user-images.githubusercontent.com/42318591/94111955-b3427480-fe7f-11ea-85f0-434aad645350.png)

## 🚖 총 발사시 화염구 이펙트, 파티클 시스템

Hierarchy - 우클 - Create - Effect - **Particle System**

### 파티클 시스템 1 : 이펙트 효과

이름은 "MuzzleFlash"

![image](https://user-images.githubusercontent.com/


arent);

			// Increments the counter and selects the inserted cells
			mxClipboard.insertCount++;
			graph.setSelectionCells(cells);
		}

		return cells;
	}

};
/**
 * Copyright (c) 2006-2015, JGraph Ltd
 * Copyright (c) 2006-2015, Gaudenz Alder
 */
/**
 * Class: mxWindow
 *
 * Basic window inside a document.
 *
 * Examples:
 *
 * Creating a simple window.
 *
 * (code)
 * var tb = document.createElement('div');
 * var wnd = new mxWindow('Title', tb, 100, 100, 200, 200, true, true);
 * wnd.setVisible(true);
 * (end)
 *
 * Creating a window that contains an iframe.
 *
 * (code)
 * var frame = document.createElement('iframe');
 * frame.setAttribute('width', '192px');
 * frame.setAttribute('height', '172px');
 * frame.setAttribute('src', 'http://www.example.com/');
 * frame.style.backgroundColor = 'white';
 *
 * var w = document.body.clientWidth;
 * var h = (document.body.clientHeight || document.documentElement.clientHeight);
 * var wnd = new mxWindow('Title', frame, (w-200)/2, (h-200)/3, 200, 200);
 * wnd.setVisible(true);
 * (end)
 *
 * To limit the movement of a window, eg. to keep it from being moved beyond
 * the top, left corner the following method can be overridden (recommended):
 *
 * (code)
 * wnd.setLocation = function(x, y)
 * {
 *   x = Math.max(0, x);
 *   y = Math.max(0, y);
 *   mxWindow.prototype.setLocation.apply(this, arguments);
 * };
 * (end)
 *
 * Or the following event handler can be used:
 *
 * (code)
 * wnd.addListener(mxEvent.MOVE, function(e)
 * {
 *   wnd.setLocation(Math.max(0, wnd.getX()), Math.max(0, wnd.getY()));
 * });
 * (end)
 *
 * To keep a window inside the current window:
 *
 * (code)
 * mxEvent.addListener(window, 'resize', mxUtils.bind(this, function()
 * {
 *   var iw = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
 *   var ih = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
 *
 *   var x = this.window.getX();
 *   var y = this.window.getY();
 *
 *   if (x + this.window.table.clientWidth > iw)
 *   {
 *     x = Math.max(0, iw - this.window.table.clientWidth);
 *   }
 *
 *   if (y + this.window.table.clientHeight > ih)
 *   {
 *     y = Math.max(0, ih - this.window.table.clientHeight);
 *   }
 *
 *   if (this.window.getX() != x || this.window.getY() != y)
 *   {
 *     this.window.setLocation(x, y);
 *   }
 * }));
 * (end)
 *
 * Event: mxEvent.MOVE_START
 *
 * Fires before the window is moved. The event property contains
 * the corresponding mouse event.
 *
 * Event: mxEvent.MOVE
 *
 * Fires while the window is being moved. The event property
 * contains the corresponding mouse event.
 *
 * Event: mxEvent.MOVE_END
 *
 * Fires after the window is moved. The event property contains
 * the corresponding mouse event.
 *
 * Event: mxEvent.RESIZE_START
 *
 * Fires before the window is resized. The event property contains
 * the corresponding mouse event.
 *
 * Event: mxEvent.RESIZE
 *
 * Fires while the window is being resized. The event property
 * contains the corresponding mouse event.
 *
 * Event: m


);
        }

        /// <summary>
        /// Creates a new enumerable which will iterate over the responses received from the ListLifecycleStages operation. This enumerable
        /// will fetch more data from the server as needed.
        /// </summary>
        /// <param name="request">The request object containing the details to send</param>
        /// <param name="retryConfiguration">The configuration for retrying, may be null</param>
        /// <param name="cancellationToken">The cancellation token object</param>
        /// <returns>The enumerator, which supports a simple iteration over a collection of a specified type</returns>
        public IEnumerable<ListLifecycleStagesResponse> ListLifecycleStagesResponseEnumerator(ListLifecycleStagesRequest request, Common.Retry.RetryConfiguration retryConfiguration = null, CancellationToken cancellationToken = default)
        {
            return new Common.Utils.ResponseEnumerable<ListLifecycleStagesRequest, ListLifecycleStagesResponse>(
                response => response.OpcNextPage,
                input =>
                {
                    if (!string.IsNullOrEmpty(input))
                    {
                        request.Page = input;
                    }
                    return request;
                },
                request => client.ListLifecycleStages(request, retryConfiguration, cancellationToken)
            );
        }

        /// <summary>
        /// Creates a new enumerable


ের সুবিধার্থে। তাহলে তার দুইটা ভিন্ন প্রোফাইল থাকবে, দুইটা ভিন্ন রোল থাকবে। সে একসাথে Student আবার Admin। কিন্তু এখানে আরেকটা প্রব্লেম আছে। আমি যখন Student কে Admin রোল দিবো তখন সে পুরো পাওয়ার পেয়ে যাবে। সে চাইলে নিজের অ্যাটেনডেন্স কোনোদিন না হলে সেটা দিয়ে দিতে পারে, বা কারো সাথে সম্পর্ক খারাপ তার অ্যাটেনডেন্স সে ডিলিট করে দিতে পারবে। আমরা তো এমন হতে দিতে পারি না। আমরা শুধু তাকে অ্যাটেনডেন্স বাটন এনেবল বা ডিজেবল করার পাওয়ার দিবো আর কিছু না। তাহলে এখানে তিনটা ডিফারেন্ট রোল থাকবে - Admin, Student, Moderator। এখন আমরা Admin & Student এর জন্য আলাদা আলাদাভাবে মডেল না নিয়ে User নামে একটা মডেল নিয়ে নিবো যাতে Roles থাকবে, যেটা দিয়ে আমরা বুঝবো সে অ্যাডমিন নাকি ছাত্র নাকি মডারেটর। এখন AccountStatus তো শুধু Student এর জন্য প্রযোজ্য। কিন্তু আমরা যেহেতু এখানে মডারেটর বা মাল্টি অ্যাডমিন নিয়ে কাজ করার বিষয় ভাবছি আমরা চাইলে কোনো অ্যাডমিনকে পেন্ডিং রাখতে পারি বা রিজেক্ট করে দিতে পারি। যদি কিছুই না


//
// OpenCover - S Wilde
//
// This source code is released under the MIT License; see the accompanying license file.
//
namespace OpenCover.Framework.Model
{
    /// <summary>
    /// A point may have a document reference
    /// </summary>
    public interface


30px;
}
.bp5-daterangepicker .rdp.rdp-multiple_months .rdp-nav{
  left:initial;
  position:initial;
  top:initial;
  transform:none;
}
.bp5-daterangepicker.bp5-datepicker .rdp-day_outside{
  visibility:hidden;
}
.bp5-daterangepicker.bp5-datepicker .rdp-day_hovered:not(.rdp-day_selected){
  border-radius:0;
  color:#215db0;
}
.bp5-daterangepicker.bp5-datepicker .rdp-day_hovered:not(.rdp-day_selected):not(.rdp-day_range_start, .rdp-day_range_middle, .rdp-day_range_end){
  background-color:rgba(45, 114, 210, 0.1);
}
.bp5-daterangepicker.bp5-datepicker .rdp-day_range_middle{
  background-color:rgba(45, 114, 210, 0.1);
  border-radius:0;
  color:#215db0;
}
.bp5-daterangepicker.bp5-datepicker .rdp-day_range_middle:hover{
  background-color:rgba(45, 114, 210, 0.2);
  color:#215db0;
}
.bp5-daterangepicker.bp5-datepicker .rdp-day_range_start:not(.rdp-day_range_end, .rdp-day_hovered_end){
  border-bottom-right-radius:0;
  border-top-right-radius:0;
}
.bp5-daterangepicker.bp5-datepicker .rdp-day_range_end:not(.rdp-day_range_start, .rdp_day_hovered_start){
  border-bottom-left-radius:0;
  border-top-left-radius:0;
}
.bp5-daterangepicker.bp5-datepicker .rdp-day_hovered_start:not(.rdp-day_hovered_end){
  border-bottom-right-radius:0;
  border-top-right-radius:0;
}
.bp5-daterangepicker.bp5-datepicker .rdp-day_hovered_end:not(.rdp-day_hovered_start){
  border-bottom-left-radius:0;
  border-top-left-radius:0;
}
.bp5-daterangepicker.bp5-datepicker-highlight-current-day .rdp-day.rdp-day_today{
  border:1px solid rgba(17, 20, 24, 0.15);
}
.bp5-daterangepicker.bp5-daterangepicker-reverse-month-and-year.bp5-daterangepicker-contiguous.rdp-caption_dropdowns{
  flex-direction:row-reverse;
}

.bp5-daterangepicker-timepickers.bp5-daterangepicker-timepickers-stacked{
  align-items:center;
  flex-direction:column;
}

.bp5-dark .bp5-daterangepicker.bp5-datepicker .rdp-day_hovered{
  color:#f6f7f9;
}
.bp5-dark .bp5-daterangepicker.bp5-datepicker .rdp-day_hovered:not(.rdp-day_selected, .rdp-day_range_start, .rdp-day_range_middle, .rdp-day_range_end){
  background-color:rgba(45, 114, 210, 0.2);
}
.bp5-dark .bp5-daterangepicker.bp5-datepicker .rdp-day_range_middle{
  background-color:rgba(45, 114, 210, 0.2);
  color:#f6f7f9;
}
.bp5-dark .bp5-daterangepicker.bp5-datepicker .rdp-day_range_middle:hover{
  background-color:rgba(45, 114, 210, 0.4);
}
.bp5-dark .bp5-daterangepicker.bp5-datepicker-highlight-current-day .rdp-day.rdp-day_today{
  border:1px solid rgba(255, 255, 255, 0.2);
}/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */

/* Document
   ========================================================================== */

/**
 * 1. Correct the line height in all browsers.
 * 2. Prevent adjustments of font size after orientation changes in iOS.
 */

ht


/* { dg-do run } */
/* { dg-options "-O2 -mavx512f" } */
/* { dg-require-effective-target avx512f } */

#include "avx512f-check.h"

extern int memcmp (const void *, const void *, __SIZE_TYPE__);

void
avx512f_test (void)
{
  union512i_d ad, zero;
  union512 bd;
  union512d cd;
  union256i_d d;
  union256 e;
  union256d f;
  union128i_d g;
  union128 h;
  union128d k;
  int i;

  for (i = 0; i < 16; i++)
    zero.a[i] = 0;

  for (i = 0; i < 8; i++)
    {
      d.a[i] = 109534 + i;
      e.a[i] = 85034.095f + i;
    }

  for (i = 0; i < 4; i++)
    {
      f.a[i] = 41234512451345.0905 + i;
      g.a[i] = 71469086341 + i;
      h.a[i] = 45.1264f + i;
    }

  for (i = 0; i < 2; i++)
    k.a[i] = 7146908634.576 + i;

  cd.x = _mm512_zextpd128_pd512 (k.x);
  if (memcmp (cd.a, k.a, 16)
      || memcmp (&cd.a[2], &zero.a, 48))
    abort ();

  bd.x = _mm512_zextps128_ps512 (h.x);
  if (memcmp (bd.a, h.a, 16)
      || memcmp (&bd.a[4], &zero.a, 48))
    abort ();

  ad.x = _mm512_zextsi128_si512 (g.x);
  if (memcmp (ad.a, g.a, 16)
      || memcmp (&ad.a[4], &zero.a, 48))
    abort ();

  cd.x = _mm512_zextpd256_pd512 (f.x);
  if (memcmp (cd.a, f.a, 32)
      || memcmp (&cd.a[4], &zero.a, 32))
    abort ();

  bd.x = _mm512_zextps256_ps512 (e.x);
  if (memcmp (bd.a, e.a, 32)
      || memcmp (&bd.a[8], &zero.a, 32))
    abort ();

  ad.x = _mm512_zextsi256_si512 (d.x);
  if (memcmp (ad.a, d.a, 32)
      || memcmp (&ad.a[8], &zero.a, 32))
    abort ();
}


03,0x03,0x05,0x06,0x07,0x08,0x09,0x0B,0x0D,0x0F,0x11
	.byte 0x13,0x15,0x17,0x18,0x18,0x18,0x19,0x19,0x1A,0x1B,0x1D,0x1F,0x1F,0x1F,0x1F,0x1F
	.byte 0x1D,0x1A,0x18,0x1A,0x1C,0x1C,0x1A,0x19,0x19,0x18,0x16,0x15,0x13,0x13,0x12,0x12
	.byte 0x12,0x11,0x12,0x13,0x13,0x12,0x12,0x10,0x0D,0x0C,0x0B,0x0B,0x0A,0x08,0x07,0x06
	.byte 0x04,0x03,0x03,0x02,0xFF,0xFC,0xFC,0xFC,0xFC,0xFB,0xF9,0xF8,0xF8,0xF7,0xF6,0xF6
	.byte 0xF6,0xF6,0xF6,0xF6,0xF7,0xF6,0xF5,0xF5,0xF6,0xF4,0xF2,0xEF,0xEE,0xEE,0xED,0xEC

	.byte 0xEC,0xEE,0xEF,0xEF,0xEF,0xEE,0xEF,0xF0,0xF0,0xF0,0xF1,0xF1,0xED,0xE8,0xE7,0xEF
	.byte 0xF6,0xF6,0xF6,0xF7,0xF8,0xFA,0xFC,0xFD,0xFF,0x03,0x04,0x04,0x04,0x05,0x07,0x08
	.byte 0x09,0x0A,0x0E,0x10,0x10,0x10,0x11,0x12,0x12,0x12,0x11,0x0F,0x0E,0x10,0x12,0x14
	.byte 0x17,0x1A,0x1A,0x16,0x10,0x10,0x14,0x15,0x13,0x11,0x10,0x13,0x14,0x13,0x11,0x0D
	.byte 0x0C,0x0E,0x10,0x11,0x12,0x12,0x12,0x18,0x21,0x1F,0x1B,0x19,0x15,0x10,0x0D,0x0B
	.byte 0x08,0x04,0x01,0xFF,0xFE,0xFD,0xFC,0xFD,0xFD,0xFB,0xF9,0xF7,0xF4,0xF3,0xF3,0xF3
	.byte 0xF1,0xEF,0xED,0xEB,0xEC,0xED,0xEE,0xEE,0xEF,0xF1,0xF4,0xF7,0xF9,0xF9,0xF9,0xF8
	.byte 0xF7,0xF7,0xF8,0xF9,0xF8,0xF9,0xF9,0xF7,0xF7,0xF7,0xF6,0xF5,0xF5,0xF4,0xF4,0xF4

	.byte 0xF4,0xF4,0xF3,0xF3,0xF4,0xF6,0xF6,0xF3,0xF0,0xF2,0xF5,0xF6,0xF6,0xF6,0xF6,0xF7
	.byte 0xF


em;
    margin: -0.5em 0 0 0;
}
ul.list li {
    margin-bottom: 0.7em;
}

ul.mdash {
    margin: -1em 0 0 0;
    padding: 0 0 0 2em;
}
ul.mdash li {
    margin-bottom: 0.7em;
    list-style-type: none;
    text-indent: -1.3em;
    behavior: expression(!this.before ? this.before = this.innerHTML = '— ' + this.innerHTML : '');
}
ul.mdash li:before {
    content: '\2014\a0';
}

.small_line_indent {
    height: 0;
    margin-top: -7px;
}
/************/

/* Tooltips */
.tooltip {
    font-size: 0.9em;
    margin-bottom: 5px;
}
.tooltip.in {
    opacity: 1;
}
.tooltip-inner {
    text-align: left;
}
.tooltip-link,
.tooltip-link:visited {
    text-decoration: none;
    color: #000;
    border-bottom: 1px dashed #bbb;
    cursor: hand;
}
.tooltip-link:hover {
    text-decoration: none;
    color: #b33;
    border-bottom: 1px dashed #b33;
}
/************/

/*********/

.hs {
    /* Полупробел для
  разделения разрядов чисел:
  10000 */
    margin-left: .2em;
}

.rhs {
    /* Полупробел на случай,
  если реальный пробел важен,
  например между ценой и валютой:
  1 $ */
    font-size: 50%;
    line-height: 1;
}

/*9490 €
*/
/*12650 $
*/
/*379000 Р
*/
/*100500 +*/

/* for wrapping long words with no spaces */
/* http://stackoverflow.com/questions/3247358/css-how-do-i-wrap-text-with-no-whitespace-inside-a-td */
.wrapword {
    white-space: -moz-pre-wrap !important;  /* Mozilla, since 1999 */
    white-space: -pre-wrap;      /* Opera 4-6 */
    white-space: -o-pre-wrap;    /* Opera 7 */
    white-space: pre-wrap;       /* css-3 */
    word-wrap: break-word;       /* Internet Explorer 5.5+ */
    word-break: break-all;
    white-space: normal;
}

.space_1px {
    height: 1px;
}
.space_2px {
    height: 2px;
}
.space_3px {
    height: 3px;
}
.space_4px {
    height: 4px;
}
.space_5px {
    height: 5px;
}
.space_6px {
    height: 6px;
}
.space_7px {
    height: 7px;
}
.space_8px {
    height: 8px;
}
.space_9px {
    height: 9px;
}
.space_10px {
    height: 10px;
}
.layout-table {
    width: 99%;
    border-spacing: 0;
}

.layout-table td.layout-table-td {
    vertical-align: top;
    padding: 0;
}
.layout-table td.layout-table-fst-td {
    min-width: 400


TestSpec(),
			},
			atlas: &dbuser.User{
				AtlasDatabaseUserSpec: func() *akov2.AtlasDatabaseUserSpec {
					spec := defaultTestSpec()
					spec.Username = spec.Username + "1"
					spec.DatabaseName = spec.DatabaseName + "2"
					spec.DeleteAfterDate = testOtherDate
					spec.OIDCAuthType = "IDP_GROUP"
					spec.AWSIAMType = "USER"
					spec.X509Type = "MANAGED"
					return spec
				}(),
			},
			expectedDiffs: []string{
				"username",
				"databaseName",
				"deleteAfterDate",
				"oidcAuthType",
				"awsIamType",
				"x509Type",
			},
		},

		{
			title: "Role diffs are flagged",
			spec: &dbuser.User{
				AtlasDatabaseUserSpec: func() *akov2.AtlasDatabaseUserSpec {
					spec := defaultTestSpec()
					spec.Roles = []akov2.RoleSpec{
						{RoleName: "role2", DatabaseName: "database2", CollectionName: "collection2"},
						{RoleName: "role2", DatabaseName: "database1", CollectionName: "collection1"},
						{RoleName: "role1", DatabaseName: "database1", CollectionName: "collection1"},
					}
					return spec
				}(),
			},
			atlas: &dbuser.User{
				AtlasDatabaseUserSpec: func() *akov2.AtlasDatabaseUserSpec {
					spec := defaultTestSpec()
					spec.Roles = []akov2.RoleSpec{
						{RoleName: "role2", DatabaseName: "database2", CollectionName: "collection2"},
						{RoleName: "role1", DatabaseName: "database1", CollectionName: "collection1"},
					}
					return spec
				}(),
			},
			expectedDiffs: []string{"roles", `"prop-removed":{"roleName": "role1"}`},
		},

		{
			title: "Equal role lists show no diffs",
			spec: &dbuser.User{
				AtlasDatabaseUserSpec: func() *akov2.AtlasDatabaseUserSpec {
					spec := defaultTestSpec()
					spec.Roles = []akov2.RoleSpec{
						{RoleName: "role2", DatabaseName: "database2", CollectionName: "collection2"},
						{RoleName: "role2", DatabaseName: "database1", CollectionName: "collection1"},
						{RoleName: "role1", DatabaseName: "database1", CollectionName: "collection1"},
					}
					return spec
				}(),
			},
			atlas: &dbuser.User{
				AtlasDatabaseUserSpec: func() *akov2.AtlasDatabaseUserSpec {
					spec := defaultTestSpec()
					spec.Roles = []akov2.RoleSpec{
						{RoleName: "role2", DatabaseName: "database2", CollectionName: "collection2"},
						{RoleName: "role2", DatabaseName: "database1", CollectionName: "collection1"},
						{RoleName: "role1", DatabaseName: "database1", CollectionName: "collection1"},
					}
					return spec
				}(),
			},
			expectedDiffs: []string{},
		},

		{
			title: "Scope diffs are flagged",
			spec: &dbuser.User{
				AtlasDatabaseUserSpec: func() *akov2.AtlasDatabaseUserSpec {
					spec := defaultTestSpec()
					spec.Scopes = []akov2.ScopeSpec{
						{Name: "cluster1", Type: "CLUSTER"},
						{Name: "lake2", Type: "DATA_LAKE"},
					}
					return spec
				}(),
			},
			atlas: &dbuser.User{
				AtlasDatabaseUserSpec: func() *akov2.AtlasDatabaseUserSpec {
					spec := defaultTestSpec()
					spec.Scopes = []akov2.ScopeSpec{
						{Name: "cluster1", Type: "CLUSTER"},


	}

	encap := IP6tnlEncap{
		Dst: net.ParseIP("2001:db8::"),
		Src: net.ParseIP("::"),
	}

	route := &Route{
		LinkIndex: link.Attrs().Index,
		Dst:       dst,
		Encap:     &encap,
	}

	if err := RouteAdd(route); err != nil {
		t.Fatalf("Cannot add route: %v", err)
	}
	routes, err := RouteList(link, FAMILY_V4)
	if err != nil {
		t.Fatal(err)
	}
	if len(routes) != 1 {
		t.Fatal("Route not added properly")
	}

	if err := RouteDel(route); err != nil {
		t.Fatal(err)
	}
	routes, err = RouteList(link, FAMILY_V4)
	if err != nil {
		t.Fatal(err)
	}
	if len(routes) != 0 {
		t.Fatal("Route not removed properly")
	}

}

func TestRouteEqual(t *testing.T) {
	mplsDst := 100
	seg6encap := &SEG6Encap{Mode: nl.SEG6_IPTUN_MODE_ENCAP}
	seg6encap.Segments = []net.IP{net.ParseIP("fc00:a000::11")}
	cases := []Route{
		{
			Dst: nil,
			Gw:  net.IPv4(1, 1, 1, 1),
		},
		{
			LinkIndex: 20,
			Dst:       nil,
			Gw:        net.IPv4(1, 1, 1, 1),
		},
		{
			ILinkIndex: 21,
			LinkIndex:  20,
			Dst:        nil,
			Gw:         net.IPv4(1, 1, 1, 1),
		},
		{
			LinkIndex: 20,
			Dst:       nil,
			Protocol:  20,
			Gw:        net.IPv4(1, 1, 1, 1),
		},
		{
			LinkIndex: 20,
			Dst:       nil,
			Priority:  20,
			Gw:        net.IPv4(1, 1, 1, 1),
		},
		{
			LinkIndex: 20,
			Dst:       nil,
			Type:      20,
			Gw:        net.IPv4(1, 1, 1, 1),
		},
		{
			LinkIndex: 20,
			Dst:       nil,
			Table:     200,
			Gw:        net.IPv4(1, 1, 1, 1),
		},
		{
			LinkIndex: 20,
			Dst:       nil,
			Tos:       1,
			Gw:        net.IPv4(1, 1, 1, 1),
		},
		{
			LinkIndex: 20,
			Dst:       nil,
			Hoplimit:  1,
			Gw:        net.IPv4(1, 1, 1, 1),
		},
		{
			LinkIndex: 20,
			Dst:       nil,
			Realm:     29,
			Gw:        net.IPv4(1, 1, 1, 1),
		},
		{
			LinkIndex: 20,
			Dst:       nil,
			Flags:     int(FLAG_ONLINK),
			Gw:        net.IPv4(1, 1, 1, 1),
		},
		{
			LinkIndex: 10,
			Dst: &net.IPNet{
				IP:   net.IPv4(192, 168, 0, 0),
				Mask: net.CIDRMask(24, 32),
			},
			Src: net.IPv4(127, 1, 1, 1),
		},
		{
			LinkIndex: 10,
			Scope:     unix.RT_SCOPE_LINK,
			Dst: &net.IPNet{
				IP:   net.IPv4(192, 168, 0, 0),


部的布莱克威尔南瓜田附近。$B$B这件事非常重要，你必须向闪金镇的治安官杜汉报告。",
    ["O"] = "去闪金镇找治安官杜汉，把收货人的交易日程表交给他。",
    ["T"] = "收货人",
  },
  [124] = {
    ["D"] = "似乎有这些整天攻城的兽人还不够乱！我发现最近老有一些混蛋豺狼人鬼鬼祟祟地沿着山脊在我的马场北面游荡，而且还偷我的马……$B$B如果你能把这些豺狼人都干掉的话，我，还有我的马都会感谢你的。",
    ["O"] = "杀掉10只赤脊山蛮兵和8只赤脊山秘法师，然后向弗纳·奥斯古复命。",
    ["T"] = "豺狼人的乱吠",
  },
  [125] = {
    ["D"] = "我本来可以在这儿大干一场的, $N。可是，我的工具还没到货，由于镇子被包围了，我们很难得到外面来的补给。我本来托人从闪金镇把工具用马车运过来，可是桥被砸断了，他们只好改用船运，结果那船又被兽人的投石车给打沉了。不过，算是不幸中的万幸吧，我的工具箱没坏，它只是沉进了湖底。$b$b帮我把工具箱找回来吧，$N，我会付给你不错的酬劳的。",
    ["O"] = "湖畔镇的工头奥斯洛希望你帮他找回沉入止水湖底的工具箱。",
    ["T"] = "丢失的工具",
  },
  [126] = {
    ["D"] = "$N，那些豺狼人居然还没死绝！我还能听见他们在湖畔镇周围的山区里打猎时发出的嚎叫声。其中有一个声音喊得最响——那是犹勒，他们的头儿。$B$B干掉犹勒，把他的手下都给轰走！把这个混蛋的爪子给我带回来。$B$B不过你得小心点，这家伙能当上他们的头儿自然是有两把刷子的。犹勒可不是个低能的混血豺狼人，他是纯种的……",
    ["O"] = "将犹勒的爪子带回给湖畔镇的弗纳·奥斯古。",
    ["T"] = "群山中的嚎叫",
  },
  [127] = {
    ["D"] = "止水湖的斑点太阳鱼是天下闻名的美味。它们总是供不应求


 (aChatReturn != null) {
				aChatReturn.add("Heat Levels: " + (oEnergy <= 0 ? "None" : oEnergy + " HU"));
			}
			return 10000;
		}
		if (aTool.equals(TOOL_magnifyingglass)) {
			if (aChatReturn != null) {
				aChatReturn.add("Input: "  + mTanks[0].content());
				aChatReturn.add("Output: " + mTanks[1].content());
				aChatReturn.add(mStopped?"Reactor Block is OFF":"Reactor Block is ON");
			}
			return 1;
		}
		return 0;
	}

	@Override
	public boolean onBlockActivated3(EntityPlayer aPlayer, byte aSide, float aHitX, float aHitY, float aHitZ) {
		if (isServerSide() && SIDES_TOP[aSide]) {
			ItemStack aStack = aPlayer.getCurrentEquippedItem();
			if (ST.item(aStack) instanceof IItemReactorRod && ((IItemReactorRod)ST.item_(aStack)).isReactorRod(aStack)) {
				int tSlot = aHitX < 0.5 ? aHitZ < 0.5 ? 0 : 1 : aHitZ < 0.5 ? 2 : 3;
				if (!slotHas(tSlot) && ST.use(aPlayer, aStack)) {
					slot(tSlot, ST.amount(1, aStack));
					mStopped = T;
					UT.Sounds.send(SFX.MC_CLICK, this, F);
					updateClientData();
				}
			}
		}
		return T;
	}

	protected byte oVisual = 0;

	@Override
	public boolean onTickCheck(long aTimer) {
		return oVisual != getVisualData() || super.onTickCheck(aTimer);
	}

	@Override
	public void onTickResetChecks(long aTimer, boolean aIsServerSide) {
		super.onTickResetChecks(aTimer, aIsServerSide);
		oVisual = getVisualData();
	}

	@Override
	public void setVisualData(byte aData) {
		mStopped = ((aData & 32) != 0);
		mRunning = ((aData & 16) != 0);
		mMode = (byte)(aData & 15);
	}

	@Override public byte getVisualData() {return (byte)(mStopped?mRunning?mMode|48:mMode|32:mRunning?mMode|16:mMode);}
	@Override public byte getDefaultSide() {return SIDE_BOTTOM;}
	@Override public byte getDefaultSecondSide() {return SIDE_BOTTOM;}
	@Override public boolean[] getValidSides() {return SIDES_VALID;}

	@Override public void updateTanks() {/**/}
	@Override public void updateInventory() {super.updateInventory(); updateClientData();}

	@Override
	protected IFluidTank getFluidTankFillable2(byte aSide, FluidStack aFluidToFill) {
		return FL.Coolant_IC2.is(aFluidToFill)
			|| FL.distw(aFluidToFill)
			|| FL.Thorium_Salt.is(aFluidToFill)
			|| MT.Sn.mLiquid.isFluidEqual(aFluidToFill)
			|| MT.Na.mLiquid.isFluidEqual(aFluidToFill)
			|| MT.HDO.mLiquid.isFluidEqual(aFluidToFill)
			|| MT.D2O.mLiquid.isFluidEqual(aFluidToFill)
			|| MT.T2O.mLiquid.isFluidEqual(aFluidToFill)
			|| MT.LiCl.mLiquid.isFluidEqual(aFluidToFill)
			|| MT.He.mGas.isFluidEqual(aFluidToFill)
			|| MT.CO2.mGas.isFluidEqual(aFluidToFill)
			? mTanks[0] : null;
	}

	@Override
	protected IFluidTank getFluidTankDrainable2(byte aSide, FluidStack aFluidToDrain) {
		return mTanks[1];
	}

	@Override
	protected IFluidTank[] getFluidTanks2(byte aSide) {
		return mTank


e.raw=h.slice(u.start,u.end);if(u.regex){if(e.raw==="//"){e.raw="/(?:)/"}e.regex=u.regex}return e}function ju(u,e,t){const r=new f(_);r.computed=u==="[";r.object=e;r.property=t;if(!r.computed)t.member=true;return r}function Ru(u){const e=new f(z);e.properties=u;return e}function _u(u,e,t){const r=new f(P);r.key=e;r.value=t;r.kind=u;return r}function zu(u,e){const t=new f(Q);t.operator=u;t.argument=e;t.prefix=true;return t}function Pu(u,e){var t,r=Array.prototype.slice.call(arguments,2),n=e.replace(/%(\d)/g,((u,e)=>{ru(e<r.length,"Message reference must be in range");return r[e]}));t=new Error(n);t.index=d;t.description=n;throw t}function Qu(u){if(u.type===y){Pu(u,Y)}if(u.type===k){Pu(u,G)}if(u.type===O){Pu(u,V)}if(u.type===x){Pu(u,K)}if(u.type===b){Pu(u,X)}Pu(u,q,u.value)}function qu(u){const e=Mu();if(e.type!==M||e.value!==u){Qu(e)}}function Gu(u){return m.type===M&&m.value===u}function Vu(u){return m.type===b&&m.value===u}function Ku(){const u=[];d=m.start;qu("[");while(!Gu("]")){if(Gu(",")){Mu();u.push(null)}else{u.push(se());if(!Gu("]")){qu(",")}}}Mu();return Uu(u)}function Xu(){d=m.start;const u=Mu();if(u.type===O||u.type===k){if(u.octal){Pu(u,J)}return Tu(u)}return Nu(u.value)}function Yu(){var u,e,t,r;d=m.start;u=m;if(u.type===x){t=Xu();qu(":");r=se();return _u("init",t,r)}if(u.type===y||u.type===M){Qu(u)}else{e=Xu();qu(":");r=se();return _u("init",e,r)}}function $u(){var u=[],e,t,r,n={},A=String;d=m.start;qu("{");while(!Gu("}")){e=Yu();if(e.key.type===T){t=e.key.name}else{t=A(e.key.value)}r="$"+t;if(Object.prototype.hasOwnProperty.call(n,r)){Pu({},W)}else{n[r]=true}u.push(e);if(!Gu("}")){qu(",")}}qu("}");return Ru(u)}function Hu(){qu("(");const u=Fe();qu(")");return u}const Ju={if:1};function Wu(){var u,e,t;if(Gu("(")){return Hu()}if(Gu("[")){return Ku()}if(Gu("{")){return $u()}u=m.type;d=m.start;if(u===x||Ju[m.value]){t=Nu(Mu().value)}else if(u===O||u===k){if(m.octal){Pu(m,J)}t=Tu(Mu())}else if(u===b){throw new Error(uu)}else if(u===w){e=Mu();e.value=e.value==="true";t=Tu(e)}else if(u===v){e=Mu();e.value=null;t=Tu(e)}else if(Gu("/")||Gu


？                                | 哪些衣物材质适合冬天穿着？如何正确搭配穿出温暖感？               |
| 如何克服拖延症？                          | 有哪些科学有效的方法能够帮助人们克服拖延症？                    |
| 如何更好地保护眼睛？                  | 除了减少使用电子产品，还有哪些措施可以更好地保护眼睛健康？      |
| 瑜伽是否适合所有人练习？             | 瑜伽对身体有哪些好处？是否存在身体不适应于瑜伽的情况？        |
| 如何提高记忆力？                          | 除了背诵，还有哪些科学有效的方法可以帮助人们提高记忆力？          |
| 如何预防心理问题？                     | 有哪些建议和方法可以帮助人们预防心理问题和精神疾病？            |
| 如何才能平衡工作和生活？            | 有哪些技巧可以帮助人们平衡工作和生活？                          |
| 如何减少塑料污染？                     | 除了减少使用塑料袋，还有哪些方式可以减少塑料污染？             |
| 如何正确运动减肥？                        | 运动减肥时应该注意哪些事项？有哪些运动是减肥效果比较显著的？    |
| 如何更好地管理个人财务？          | 有哪些实用的方法可以帮助人们更好地管理个人财务？                |
| 股票投资 | 你认为目前哪些行业的股票最有投资价值？ |
| 电商平台 | 如何提升一个电商平台的用户转化率？ |
| 旅游景点 | 有哪些不太知名但非常值得一去的旅游景点？ |
| 写作技巧 | 如何让自己的文章更加生动有趣？ |
| 网络安全 | 企业应该如何保护自己的网络安全，防范黑客攻击？ |
| 人工智能 | 人工智能技术目前有哪些经典的应用案例？ |
| 游戏开发 | 制作一款好玩的游戏需要具备哪


  r"""stretches""": 14082,
  r"""##ast""": 14083,
  r"""alternatively""": 14084,
  r"""nat""": 14085,
  r"""lowe""": 14086,
  r"""lacks""": 14087,
  r"""##ented""": 14088,
  r"""pam""": 14089,
  r"""tile""": 14090,
  r"""concealed""": 14091,
  r"""inferior""": 14092,
  r"""abdullah""": 14093,
  r"""residences""": 14094,
  r"""tissues""": 14095,
  r"""vengeance""": 14096,
  r"""##ided""": 14097,
  r"""moisture""": 14098,
  r"""peculiar""": 14099,
  r"""groove""": 14100,
  r"""zip""": 14101,
  r"""bologna""": 14102,
  r"""jennings""": 14103,
  r"""ninja""": 14104,
  r"""oversaw""": 14105,
  r"""zombies""": 14106,
  r"""pumping""": 14107,
  r"""batch""": 14108,
  r"""livingston""": 14109,
  r"""emerald""": 14110,
  r"""installations""": 14111,
  r"""1797""": 14112,
  r"""peel""": 14113,
  r"""nitrogen""": 14114,
  r"""rama""": 14115,
  r"""##fying""": 14116,
  r"""##star""": 14117,
  r"""schooling""": 14118,
  r"""strands""": 14119,
  r"""responding""": 14120,
  r"""werner""": 14121,
  r"""##ost""": 14122,
  r"""lime""": 14123,
  r"""casa""": 14124,
  r"""accurately""": 14125,
  r"""targeting""": 14126,
  r"""##rod""": 14127,
  r"""underway""": 14128,
  r"""##uru""": 14129,
  r"""hemisphere""": 14130,
  r"""lester""": 14131,
  r"""##yard""": 14132,
  r"""occupies""": 14133,
  r"""2d""": 14134,
  r"""griffith""": 14135,
  r"""angrily""": 14136,
  r"""reorganized""": 14137,
  r"""##owing""": 14138,
  r"""courtney""": 14139,
  r"""deposited""": 14140,
  r"""##dd""": 14141,
  r"""##30""": 14142,
  r"""estadio""": 14143,
  r"""##ifies""": 14144,
  r"""dunn""": 14145,
  r"""exiled""": 14146,
  r"""##ying""": 14147,
  r"""checks""": 14148,
  r"""##combe""": 14149,
  r"""##о""": 14150,
  r"""##fly""": 14151,
  r"""successes""": 14152,
  r"""unexpectedly""": 14153,
  r"""blu""": 14154,
  r"""assessed""": 14155,
  r"""##flower""": 14156,
  r"""##ه""": 14157,
  r"""observing""": 14158,
  r"""sacked""": 14159,
  r"""spiders""": 14160,
  r"""kn""": 14161,
  r"""##tail""": 14162,
  r"""mu""": 14163,
  r"""nodes""": 14164,
  r"""prosperity""": 14165,
  r"""audrey""": 14166,
  r"""divisional""": 14167,
  r"""155""": 14168,
  r"""broncos""": 14169,
  r"""tangled""": 14170,
  r"""adjust""": 14171,


;
import static com.sentaroh.android.SMBSync2.ScheduleConstants.SCHEDULER_SCHEDULE_SAVED_DATA_V3;
import static com.sentaroh.android.SMBSync2.ScheduleConstants.SCHEDULER_SCHEDULE_SAVED_DATA_V4;
import static com.sentaroh.android.SMBSync2.ScheduleConstants.SCHEDULER_SCHEDULE_SAVED_DATA_V5;
import static com.sentaroh.android.SMBSync2.ScheduleConstants.SCHEDULER_SCHEDULE_TYPE_KEY;
import static com.sentaroh.android.SMBSync2.ScheduleConstants.SCHEDULER_SEPARATOR_DUMMY_DATA;
import static com.sentaroh.android.SMBSync2.ScheduleConstants.SCHEDULER_SEPARATOR_ENTRY;
import static com.sentaroh.android.SMBSync2.ScheduleConstants.SCHEDULER_SEPARATOR_ITEM;
import static com.sentaroh.android.SMBSync2.ScheduleConstants.SCHEDULER_SYNC_DELAYED_TIME_FOR_WIFI_ON_DEFAULT_VALUE;
import static com.sentaroh.android.SMBSync2.ScheduleConstants.SCHEDULER_SYNC_DELAYED_TIME_FOR_WIFI_ON_KEY;
import static com.sentaroh.android.SMBSync2.ScheduleConstants.SCHEDULER_SYNC_PROFILE_KEY;
import static com.sentaroh.android.SMBSync2.ScheduleConstants.SCHEDULER_SYNC_WIFI_OFF_AFTER_SYNC_END_KEY;
import static com.sentaroh.android.SMBSync2.ScheduleConstants.SCHEDULER_SYNC_WIFI_ON_BEFORE_SYNC_START_KEY;

public class ScheduleUtil {
    private static Logger slf4jLog = LoggerFactory.getLogger(ScheduleUtil.class);

    final static public ArrayList<ScheduleItem> loadScheduleData(Context c, GlobalParameters gp) {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(c);
        ArrayList<ScheduleItem> sl = new ArrayList<ScheduleItem>();
        ScheduleItem sp = new ScheduleItem();
        String v2_data = prefs.getString(SCHEDULER_SCHEDULE_SAVED_DATA_V2, "-1");
        String v3_data = prefs.getString(SCHEDULER_SCHEDULE_SAVED_DATA_V3, "-1");
        String v4_data = prefs.getString(SCHEDULER_SCHEDULE_SAVED_DATA_V4, "-1");
        String v5_data = prefs.getString(SCHEDULER_SCHEDULE_SAVED_DATA_V5, "-1");
        if (!v5_data.equals("-1")) {
            sl = buildScheduleListV5(gp, v5_data);
        } else if (!v4_data.equals("-1")) {
            sl = buildScheduleListV4(gp, v4_data);
            saveScheduleData(c, gp, sl);
        } else if (!v3_data.equals("-1")) {
            sl = buildScheduleListV3(gp, v3_data);
            saveScheduleData(c, gp, sl);
        } else if (!v2_data.equals("-1")) {
            sl = buildScheduleListV2(gp, v2_data);
            saveScheduleData(c, gp, sl);
        } else {
            if (!prefs.getString(SCHEDULER_SCHEDULE_HOURS_KEY, "-1").equals("-1")) {
                sp.scheduleName = "NO NAME";
                sp.scheduleEnabled = prefs.getBoolean(SCHEDULER_SCHEDULE_ENABLED_KEY, false);
//                sp.scheduleIntervalFirstRunImmed = prefs.getBoolean(SCHEDULER_SCHEDULE_INTERVAL_FIRST_RUN_KEY, false);
                sp.scheduleType = prefs.getString(SCHEDULER_SCHEDULE_TYPE_KEY, ScheduleItem.SCHEDULER_SCHEDULE_TYPE_EVERY_DAY);
                sp.scheduleHours = prefs.getString(SCHEDULER_SCHEDULE_HOURS_KEY, "00");
                sp.scheduleMinutes = prefs.getString(SCHEDULER_SCHEDULE_MINUTES_KEY, "00");
                sp.scheduleDayOfTheWeek =


8_path){
        return OGR_STBL_SaveStyleTable( (OGRStyleTableH) self, utf8_path );
   }
SWIGINTERN char const *OGRStyleTableShadow_Find(OGRStyleTableShadow *self,char const *pszName){
        return OGR_STBL_Find( (OGRStyleTableH) self, pszName );
   }
SWIGINTERN void OGRStyleTableShadow_ResetStyleStringReading(OGRStyleTableShadow *self){
        OGR_STBL_ResetStyleStringReading( (OGRStyleTableH) self );
   }
SWIGINTERN char const *OGRStyleTableShadow_GetNextStyle(OGRStyleTableShadow *self){
        return OGR_STBL_GetNextStyle( (OGRStyleTableH) self );
   }
SWIGINTERN char const *OGRStyleTableShadow_GetLastStyleName(OGRStyleTableShadow *self){
        return OGR_STBL_GetLastStyleName( (OGRStyleTableH) self );
   }
SWIGINTERN OGRDataSourceShadow *OGRDriverShadow_CreateDataSource(OGRDriverShadow *self,char const *utf8_path,char **options=0){
    OGRDataSourceShadow *ds = (OGRDataSourceShadow*) OGR_Dr_CreateDataSource( self, utf8_path, options);
    return ds;
  }
SWIGINTERN OGRDataSourceShadow *OGRDriverShadow_CopyDataSource(OGRDriverShadow *self,OGRDataSourceShadow *copy_ds,char const *utf8_path,char **options=0){
    OGRDataSourceShadow *ds = (OGRDataSourceShadow*) OGR_Dr_CopyDataSource(self, copy_ds, utf8_path, options);
    return ds;
  }

#include <limits.h>
#if !defined(SWIG_NO_LLONG_MAX)
# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
#   define LLONG_MAX __LONG_LONG_MAX__
#   define LLONG_MIN (-LLONG_MAX - 1LL)
#   define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
# endif
#endif

SWIGINTERN int
SWIG_AsVal_double (PyObject *obj, double *val)
{
  int res = SWIG_TypeError;
  if (PyFloat_Check(obj)) {
    if (val) *val = PyFloat_AsDouble(obj);
    return SWIG_OK;
  } else if (PyInt_Check(obj)) {
    if (val) *val = PyInt_AsLong(obj);
    return SWIG_OK;
  } else if (PyLong_Check(obj)) {
    double v = PyLong_AsDouble(obj);
    if (!PyErr_Occurred()) {
      if (val) *val = v;
      return SWIG_OK;
    } else {
      PyErr_Clear();
    }
  }
#ifdef SWIG_PYTHON_CAST_MODE
  {
    int dispatch = 0;
    double d = PyFloat_AsDouble(obj);
    if (!PyErr_Occurred()) {
      if (val) *val = d;
      return SWIG_AddCast(SWIG_OK);
    } else {
      PyErr_Clear();
    }
    if (!dispatch) {
      long v = PyLong_AsLong(obj);
      if (!PyErr_Occurred()) {
	if (val) *val = v;
	return SWIG_AddCast(SWIG_AddCast(SWIG_OK));
      } else {
	PyErr_Clear();
      }
    }
  }
#endif
  return res;
}

#include <float.h>

#include <math.h>

SWIGINTERNINLINE int
SWIG_CanCastAsInteger(double *d, double min, double max) {
  double x = *d;
  if ((min <= x && x <= max)) {
   double fx = floor(x);
   double cx = ceil


�条 继续教育必须坚持理论联系实际、学用结合、讲求实效的原则。

第六条 专业技术人员接受继续教育，享受下列权利：

（一）每年接受继续教育的时间累计不少于８０学时；

（二）接受继续教育期间享受与本单位在岗工作人员同等的工资、福利待遇（与本单位另有约定的除外）；

（三）有权就侵害其接受继续教育权利的行为向所在单位的行政主管部门或人力资源和社会保障行政主管部门提出申诉或申请仲裁。

第七条 专业技术人员接受继续教育，应当服从所在单位的安排，完成学习任务，按照约定承担继续教育费用，达到约定服务时限要求。

第八条 专业技术人员所在单位在继续教育中的职责：

（一）贯彻继续教育法规，并根据有关行政主管部门或行业组织的继续教育规划、计划，结合本单位实际，制定具体实施办法；

（二）确立除有关行政主管部门或行业组织规定以外的，与本单位密切相关的学习内容；

（三）保证专业技术人员接受继续教育的时间，并按规定或约定提供必要的经费和条件；

（四）保证专业技术人员接受继续教育期间，享受本单位在岗人员同等工资、社会保险和其他福利待遇（与本单位有约定的除外）；

（五）记载、考核并上报专业技术人员接受继续教育的情况；

（六）接受人事行政主管部门、有关行政主管部门或行业组织的指导和监督。

第九条 专业技术人员接受继续教育的形式：

（一）参加高等院校、科研单位、社会团体或继续教育管理部门，以及本单位举办的进修、培训、研修班和讲座；

（二）到教学、科研、生产单位工作和学习；

（三）参加国内外学术会议、学术讲座；

（四）出国进修、考察；

（五）接受高一级的学历教育或攻读学位；

（六）有计划、有组织、有考核的自学。

第十条 普通高等院校、经教育行政主


DEG2RAD(5.0f) : DEG2RAD(5.0f);
				delta.Roll.fTime1	= 0.1f;
				delta.Roll.fTime2	= 0.25f;
				delta.Roll.eWave1	= Wave_SlowOff;
				delta.Roll.eWave2	= Wave_SlowOff;

				g_pLTClient->CPrint("Test Impact Roll = %.4f (in Deg = %.2f)", delta.Roll.fVar, RAD2DEG(delta.Roll.fVar));
			}
			break;
		}

		AddDelta(delta);
	}
}// ----------------------------------------------------------------------- //
//
// MODULE  : SHELLCASINGFX.CPP
//
// PURPOSE : defines class for ejected shells
//
// CREATED : 5/1/98
//
// (c) 1998-2002 Monolith Productions, Inc.  All Rights Reserved
//
// ----------------------------------------------------------------------- //

// Includes....

#include "stdafx.h"
#include "shellcasingfx.h"
#include "iltclient.h"
#include "ltlink.h"
#include "clientutilities.h"
#include "weaponmgr.h"
#include "gameclientshell.h"
#include "clientweaponutils.h"
#include "surfacefunctions.h"
#include "vartrack.h"
#include "fxbutemgr.h"

VarTrack	g_vtShellMaxBounceCountTrack;
VarTrack	g_vtShellMinUpVelocity;
VarTrack	g_vtShellMaxUpVelocity;
VarTrack	g_vtShellMinRightVelocity;
VarTrack	g_vtShellMaxRightVelocity;
VarTrack	g_vtShellMinForwardVelocity;
VarTrack	g_vtShellMaxForwardVelocity;
VarTrack	g_vtShellMinLifetime;
VarTrack	g_vtShellMaxLifetime;
VarTrack	g_vtShellScaleTime;
VarTrack	g_vtShellMaxScale;
VarTrack	g_vtShellMinSpinsPerSecond;
VarTrack	g_vtShellMaxSpinsPerSecond;

#define MAX_BOUNCE_COUNT				3

extern PhysicsState g_normalPhysicsState;
extern PhysicsState g_waterPhysicsState;

//-------------------------------------------------------------------------
// Utility functions
//-------------------------------------------------------------------------

// this function will return a random value that can be used for a random
// pitch/yaw velocity
float GenerateRandomVelocity()
{
	//find a random number between that range
	float fRand = GetRandom(g_vtShellMinSpinsPerSecond.GetFloat(), g_vtShellMaxSpinsPerSecond.GetFloat());

	//scale it to be either positive or negative
	if(rand() % 2 == 0)
		fRand = -fRand;

	//now map it into rotations
	return /*MATH_CIRCLE * */ fRand;
}

// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CShellCasingFX::CShellCasingFX
//
//	PURPOSE:	Initialize
//
// ----------------------------------------------------------------------- //

CShellCasingFX::CShellCasingFX()
{
    m_rRot.Init();
	m_vStartPos.Init();
	m_vStartVel.Init();
	m_nWeaponId = WMGR_INVALID_ID;
	m_nAmmoId = WMGR_INVALID_ID;
    m_b3rdPerson = LTFALSE;
    m_fPitchVel = 0.0f;
    m_fYawVel = 0.0f;
    m_fPitch = 0.0f;
    m_fYaw = 0.0f;

	m_vInitialScale.Init(1.0f, 1.0f, 1.


#ifndef _IPXE_PCIMSIX_H
#define _IPXE_PCIMSIX_H

/** @file
 *
 * PCI MSI-X interrupts
 *
 */

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );

#include <ipxe/pci.h>

/** MSI-X BAR mapped length */
#define PCI_MSIX_LEN 0x1000

/** MSI-X vector offset */
#define PCI_MSIX_VECTOR(n) ( (n) * 0x10 )

/** MSI-X vector address low 32 bits */
#define PCI_MSIX_ADDRESS_LO 0x0

/** MSI-X vector address high 32 bits */
#define PCI_MSIX_ADDRESS_HI 0x4

/** MSI-X vector data */
#define PCI_MSIX_DATA 0x8

/** MSI-X vector control */
#define PCI_MSIX_CONTROL 0xc
#define PCI_MSIX_CONTROL_MASK 0x00000001	/**< Vector is masked */

/** PCI MSI-X capability */
struct pci_msix {
	/** Capability offset */
	unsigned int cap;
	/** Number of vectors */
	unsigned int count;
	/** MSI-X table */
	void *table;
	/** Pending bit array */
	void *pba;
	/** Dummy message target */
	uint32_t *msg;
	/** Dummy message target mapping */
	struct dma_mapping map;
};

extern int pci_msix_enable ( struct pci_device *pci, struct pci_msix *msix );
extern void pci_msix_disable ( struct pci_device *pci, struct pci_msix *msix );
extern void pci_msix_map ( struct pci_msix *msix, unsigned int vector,
			   physaddr_t address, uint32_t data );
extern void pci_msix_control ( struct pci_msix *msix, unsigned int vector,
			       uint32_t mask );
extern void pci_msix_dump ( struct pci_msix *msix, unsigned int vector );

/**
 * Mask MSI-X interrupt vector
 *
 * @v msix		MSI-X capability
 * @v vector		MSI-X vector
 */
static inline __attribute__ (( always_inline )) void
pci_msix_mask ( struct pci_msix *msix, unsigned int vector ) {

	pci_msix_control ( msix, vector, PCI_MSIX_CONTROL_MASK );
}

/**
 * Unmask MSI-X interrupt vector
 *
 * @v msix		MSI-X capability
 * @v vector		MSI-X vector
 */
static inline __attribute__ (( always_inline )) void
pci_msix_unmask ( struct pci_msix *msix, unsigned int vector ) {

	pci_msix_control ( msix, vector, 0 );
}

#endif /* _IPXE_PCIMSIX_H */


rd[0]!=(short)0xff00) {
					int j;
					for(j=0;j<sd->inventory_data[index]->slot;j++){	// J[h
						int c=sd->status.inventory[index].card[j];
						if(c>0)
							run_script(itemdb_equipscript(c),0,sd->bl.id,0);
					}
				}
			}
		}
	}
	wele = sd->atk_ele;
	wele_ = sd->atk_ele_;
	def_ele = sd->def_ele;
	if(battle_config.pet_status_support) {
		if(sd->status.pet_id > 0 && sd->petDB && sd->pet.intimate > 0)
			run_script(sd->petDB->script,0,sd->bl.id,0);
		pele = sd->atk_ele;
		pdef_ele = sd->def_ele;
		sd->atk_ele = sd->def_ele = 0;
	}
	memcpy(sd->paramcard,sd->parame,sizeof(sd->paramcard));

	// iɂXe[^XῶŎs
	for(i=0;i<10;i++) {
		index = sd->equip_index[i];
		if(index < 0)
			continue;
		if(i == 9 && sd->equip_index[8] == index)
			continue;
		if(i == 5 && sd->equip_index[4] == index)
			continue;
		if(i == 6 && (sd->equip_index[5] == index || sd->equip_index[4] == index))
			continue;
		if(sd->inventory_data[index]) {
			sd->def += sd->inventory_data[index]->def;
			if(sd->inventory_data[index]->type == 4) {
				int r,wlv = sd->inventory_data[index]->wlv;
				if(i == 8 && sd->status.inventory[index].equip == 0x20) {
					//񓁗pf[^
					sd->watk_ += sd->inventory_data[index]->atk;
					sd->watk_2 = (r=sd->status.inventory[index].refine)*	// BU
						refinebonus[wlv][0];
					if( (r-=refinebonus[wlv][2])>0 )	// ߏ萸B{[iX
						sd->overrefine_ = r*refinebonus[wlv][1];

					if(sd->status.inventory[index].card[0]==0x00ff){	//
						sd->star_ = (sd->status.inventory[index].card[1]>>8);	// ̂
						wele_= (sd->status.inventory[index].card[1]&0x0f);	//
					}
					sd->attackrange_ += sd->inventory_data[index]->range;
					sd->state.lr_flag = 1;
					run_script(sd->inventory_data[index]->equip_script,0,sd->bl.id,0);
					sd->state.lr_flag = 0;
				}
				else {	//񓁗ȊO
					sd->watk += sd->inventory_data[index]->atk;
					sd->watk2 += (r=sd->status.inventory[index].refine)*	// BU
						refinebonus[wlv][0];
					if( (r-=refinebonus[wlv][2])>0 )	// ߏ萸B{[iX
						sd->overrefine += r*refinebonus[wlv][1];

					if(sd->status.inventory[index].card[0]==0x00ff){	//
						sd->star += (sd->status.inventory[index].card[1]>>8);	// ̂
						wele = (sd->status.inventory[index].card[1]&0x0f);	//
					}
					sd->attackrange += sd->inventory_data[index]->range;
					run_script(sd->inventory_data[index]->equip_script,0,sd->bl.id,0);
				}
			}
			else if(sd->inventory_data[index]->type == 5) {
				sd->watk += sd->inventory_data[index]->atk;
				refinedef += sd->status.inventory[index].refine*refinebonus[0][0];
				run_script(sd->inventory_data[index]->equip_script,0,sd->bl.id,0);
			}
		}
	}

	if(sd->equip_index[10] >= 0){ //
		index = sd->equip_index[10];
		if(sd->inventory_data[index]){		//܂ĂȂ
			sd->state.lr_flag = 2;
			run_script(sd->inventory_data[index]->equip_script,0,sd->bl.id,0);
			sd->state.lr_flag = 0;
			sd->arrow_atk += sd->inventory_data[index]->atk;
		}
	}
	sd->def += (refinedef+50)/100;

	if(sd->attackrange < 1) sd->attackrange = 1;
	if(sd->attackrange_ < 1) sd->attackrange_ = 1;
	if(sd->attackrange < sd->attackrange_)
		sd->attackrange = sd->attackrange_;
	if(sd->status.weapon == 11)
		sd->attackrange += sd->arrow_range;
	if(wele > 0)
		sd->atk_ele = wele;
	if(wele_ > 0)
		sd->atk_ele_ = wele_;
	if(def_ele > 0)
		sd->def_ele = def_ele;
	if(battle_config.pet_status_support) {
		if(pele > 0 && !sd->atk_ele)
			sd->atk_ele = pele;
		if(pdef_ele > 0 && !sd->def_ele)
			sd->def_ele = pdef_ele;
	}
	sd->double_rate += sd->double_add_rate;
	sd->perfect_hit += sd->perfect_hit_add;
	sd->get_zeny_num += sd->get_zeny_add_num;
	sd->splash_range += sd->splash_add_range;
	if(sd->speed_add_rate != 100)
		sd->speed_rate += sd->speed_add_rate - 100;
	if(sd->aspd_add_rate != 100)
		sd->aspd_rate += sd->aspd_add_rate - 100;

	// ATKTCY␳ (E)
	sd->atkmods[0] = atkmods[0][sd->weapontype1];
	sd->atkmods[1] = atkmods[1][sd->weapontype1];
	sd->atkmods[2] = atkmods[2][sd->weapontype1];
	//ATKTCY␳ ()
	sd->atkmods_[0] = atkmods[0][sd->weapontype2];
	sd->atkmods_[1] = atkmods[1][sd->weapontype2];
	sd->atkmods_[2] = atkmods[2][sd->weapontype2];

	// job{[iX
	for(i=0;i<sd->status.job_level && i<MAX_LEVEL;i++){
		if(job_bonus[s_class.upper][s_class.job][i])
			sd->paramb[job_bonus[s_class.upper][s_class.job][i]-1]++;
	}

	if( (skill=pc_checkskill(sd,AC_OWL))>0 )	// ӂ낤̖
		sd->paramb[4] += skill;

	// Xe[^Xωɂ{p[^␳
	if(sd->sc_count){
		if(sd->sc_data[SC_CONCENTRATE].timer!=-1 && sd->sc_data[SC_QUAGMIRE].timer == -1){	// W͌
			sd->paramb[1]+= (sd->status.ag


        child: AppBarLayout,
        target: View,
        dx: Int,
        dy: Int,
        consumed: IntArray,
        type: Int
    ) {
        Timber.d("onNestedPreScroll：===> ${child.totalScrollRange}, dx:$dx, dy:$dy, type:$type")
        // 当 type 返回 ViewCompat.TYPE_NON_TOUCH 时，表示当前 target 处于非 Touch 的滑动，
        // 该 bug 是因为 AppBarLayout 在滑动时，CoordinatorLayout 内的实现 NestedScrollingChild2 接口的滑动子类还未结束其自身的 Fling导致的，
        // 所以这里监听子类的非 Touch 时的滑动，然后 block 掉滑动事件传递给 AppBarLayout。
        takeIf { type == ViewCompat.TYPE_NON_TOUCH }?.let { isFlinging = true }
        takeUnless { shouldBlockNestedScroll }?.let { super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type) }
    }

    override fun onNestedScroll(
        coordinatorLayout: CoordinatorLayout,
        child: AppBarLayout,
        target: View,
        dxConsumed: Int,
        dyConsumed: Int,
        dxUnconsumed: Int,
        dyUnconsumed: Int,
        type: Int,
        consumed: IntArray
    ) {
        Timber.d("onNestedScroll: ===> target:${target.javaClass}, ${child.totalScrollRange}, dxConsumed:$dxConsumed, dyConsumed:$dyConsumed, type:$type")
        takeUnless { shouldBlockNestedScroll }?.let {
            super.onNestedScroll(
                coordinatorLayout,
                child,
                target,
                dxConsumed,
                dyConsumed,
                dxUnconsumed,
                dyUnconsumed,
                type,
                consumed
            )
        }
    }

    override fun onStopNestedScroll(coordinatorLayout: CoordinatorLayout, abl: AppBarLayout, target: View, type: Int) {
        Timber.d("onStopNestedScroll：===> calling me...")
        super.onStopNestedScroll(coordinatorLayout, abl, target, type)
        isFlinging = false
        shouldBlockNestedScroll = false
    }
}package cn.cqautotest.sunnybeach.action

import android.os.Bundle

/**
 * author : A Lonely Cat
 * github : https://github.com/anjiemo/SunnyBeach
 * time   : 2021/11/15
 * desc   : 评论意图
 */
interface CommendAction {

    /**
     * 获取包装了评论的参数
     */
    fun getCommentArgs(): Bundle

    /**
     * 获取被评论的用户名称
     */
    fun getTargetUserName() = getCommentArgs().getString(TARGET_USER_NAME).orEmpty()

    /**
     * 获取动态Id
     */
    fun getMomentId() = getCommentArgs().getString(MOMENT_ID).orEmpty()

    /**
     * 获取被评论内容的Id
     */
    fun getCommentId() = getCommentArgs().getString(COMMENT_ID)

    /**
     * 被评论内容的用户Id
     */
    fun getTargetUserId() = getCommentArgs().getString(TARGET_USER_ID)

    /**
     * 是否为评论回复
     * 回复：true
     * 评论：false
     */
    fun isReply() = getCommentArgs().getBoolean(IS_REPLY, false)

    companion object {

        // 动态Id
        const val MOMENT_ID = "moment_id"

        // 被评论内容的Id
        const val COMMENT_ID = "comment_id"

        // 被评论内容的用户Id
        const val TARGET_USER_ID = "target_user_id"

        // 被评论内容的用户名称
        const val TARGET_USER_NAME


w:0 1px 8px rgba(0,0,0,.1);box-shadow:0 1px 8px rgba(0,0,0,.1)}.block-spinner-bar>div,.page-spinner-bar>div{background:#eee;border-radius:100%!important}.page-loading>span{line-height:20px;vertical-align:middle}.page-spinner-bar{position:fixed;z-index:10051;width:100px;top:40%;left:50%;margin-left:-55px;text-align:center}.page-spinner-bar>div{margin:0 5px;width:18px;height:18px;display:inline-block;-webkit-animation:bounceDelay 1.4s infinite ease-in-out;animation:bounceDelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.page-spinner-bar .bounce1{-webkit-animation-delay:-.32s;animation-delay:-.32s}.page-spinner-bar .bounce2{-webkit-animation-delay:-.16s;animation-delay:-.16s}.block-spinner-bar{display:inline-block;width:80px;text-align:center}.block-spinner-bar>div{margin:0 2px;width:15px;height:15px;display:inline-block;-webkit-animation:bounceDelay 1.4s infinite ease-in-out;animation:bounceDelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}[class^=m-icon-],[class^=m-icon-big-]{display:inline-block;background-image:url(../img/syncfusion-icons.png);background-position:0 0;background-repeat:no-repeat}.block-spinner-bar .bounce1{-webkit-animation-delay:-.32s;animation-delay:-.32s}.block-spinner-bar .bounce2{-webkit-animation-delay:-.16s;animation-delay:-.16s}[class^=m-icon-]{width:14px;height:14px;margin-top:3px;line-height:14px;vertical-align:top}[class^=m-icon-big-]{width:30px;height:30px;margin:6px;vertical-align:middle}.btn.m-icon-big{padding:9px 16px 8px}.btn.m-icon-big.m-icon-only{padding:9px 8px 8px 0}.btn.m-icon-big [class^=m-icon-big-]{margin:0 0 0 10px}.btn.m-icon-ony>i{margin-left:0}.btn.m-icon{padding:7px 14px}.btn.m-icon [class^=m-icon-]{margin:4px 0 0 5px}.btn.m-icon.m-icon-only{padding:7px 10px 7px 6px}.m-icon-white{background-image:url(../img/syncfusion-icons-white.png)}.m-icon-swapright{background-position:-27px -10px}.m-icon-swapdown{background-position:-68px -10px}.m-icon-swapleft{background-position:-8px -10px}.m-icon-swapup{background-position:-46px -10px}.m-icon-big-swapright{background-position:-42px -28px}.m-icon-big-swapdown{background-position:-115px -28px}.m-icon-big-swapleft{background-position:-6px -28px}.m-icon-big-swapup{background-position:-78px -28px}.modal{z-index:10050;outline:0;overflow-y:auto!important}.page-portlet-fullscreen .modal{z-index:10060}.modal .modal-header{border-bottom:1px solid #EFEFEF}.modal .modal-header h3{font-weight:300}.modal .modal-header .close{margin-top:0!important}.modal .modal-dialog{z-index:10051}.modal>.loading{position:absolute;top:50%;left:50%;margin-top:-22px;margin-left:-22px}.modal.in .page-loading{display:none}.modal-open